Rust 安全應用開發 51 條
本文翻譯自法國國家網絡安全局 (ASSNI) 的《用 Rust 開發安全應用的編程規則》(PROGRAMMING RULES TO DEVELOPSECURE APPLICATIONS WITH RUST(https://www.ssi.gouv.fr/uploads/2020/06/anssi-guide-programming_rules_to_develop_secure_applications_with_rust-v1.0.pdf))
-
要使用 stable 編譯工具鏈
-
要在 cargo 配置文件中將重要變量保持爲默認值
-
要在運行 cargo 時保持編譯環境變量爲默認值
-
要週期地使用 linter
-
要使用 Rust 格式器(rustfmt)
-
要人工檢查自動修復
-
要檢查依賴版本是否過期(cargo-outdated)
-
要檢查依賴的安全脆弱性(vulnerabilities)(cargo-audit)
-
要遵循命名轉換
-
不要使用
unsafe
塊 -
要用合適的算術操作來處理潛在的溢出
-
推薦實現包含了所有可能錯誤的自定義錯誤類型
-
推薦使用
?
操作符且不使用try!
宏 -
不要使用能導致
panic!
的函數 -
要測試數組索引使用是否正確,或者使用
get
方法 -
要在 FFI 中正確地處理
panic!
-
不要使用
forget
-
推薦使用 clippy 檢查
forget
的使用 -
不要泄露內存
-
要釋放包裹在
ManaullyDrop
裏的值 -
總是調用
into_rawed
值對應的from_raw
函數 -
不要使用未初始化內存
-
使用完敏感數據後要將內存清零
-
推薦校驗
Drop
實現 -
不要再
Drop
實現內部恐慌(panic) -
不允許
Drop
的循環引用 -
推薦不依賴
Drop
來保證安全 -
推薦校驗
Send
和Sync
實現 -
要遵循標準庫比較特質(trait)的不變之處
-
推薦使用標準庫比較特質的默認實現
-
推薦儘可能派生(derive)比較特質
-
要在 FFI 中只使用 C 兼容類型
-
在 FFI 邊界要使用兼容性的類型
-
推薦使用綁定自動生成工具
-
在綁定到平臺依賴類型時,要使用可移植別名
c_*
-
推薦在 Rust 中檢查外部類型
-
推薦指針類型而不是引用類型 [^1]
-
不要使用未檢查的外部引用
-
檢查外部指針
-
要標記 FFI 中的函數指針類型爲
extern
和unsafe
-
檢查外部函數指針
-
建議不在 FFI 邊界使用不美容的 Rust
enum
類型 -
建議爲外部不透明類型使用專門的 Rust 類型
-
推薦使用不完整的 C/C++
struct
指針來使得類型不透明 -
不要在 FFI 邊界使用實現了
Drop
的類型 -
要確保在 FFI 中清除數據所有權
-
推薦將外部數據包裹在可釋放內存的包裝類型
-
要在 FFI 中 正確地處理
panic!
-
推薦爲外部庫提供安全的包裝
-
推薦只暴露專門的 C 兼容 API
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ObPqpJ9XiDqeBA-iM2yEVw