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))

  1. 要使用 stable 編譯工具鏈

  2. 要在 cargo 配置文件中將重要變量保持爲默認值

  3. 要在運行 cargo 時保持編譯環境變量爲默認值

  4. 要週期地使用 linter

  5. 要使用 Rust 格式器(rustfmt)

  6. 要人工檢查自動修復

  7. 要檢查依賴版本是否過期(cargo-outdated)

  8. 要檢查依賴的安全脆弱性(vulnerabilities)(cargo-audit)

  9. 要遵循命名轉換

  10. 不要使用 unsafe 塊

  11. 要用合適的算術操作來處理潛在的溢出

  12. 推薦實現包含了所有可能錯誤的自定義錯誤類型

  13. 推薦使用 ? 操作符且不使用 try! 宏

  14. 不要使用能導致 panic! 的函數

  15. 要測試數組索引使用是否正確,或者使用 get 方法

  16. 要在 FFI 中正確地處理 panic!

  17. 不要使用 forget

  18. 推薦使用 clippy 檢查 forget 的使用

  19. 不要泄露內存

  20. 要釋放包裹在 ManaullyDrop 裏的值

  21. 總是調用 into_rawed 值對應的 from_raw 函數

  22. 不要使用未初始化內存

  23. 使用完敏感數據後要將內存清零

  24. 推薦校驗 Drop 實現

  25. 不要再 Drop 實現內部恐慌(panic)

  26. 不允許 Drop 的循環引用

  27. 推薦不依賴 Drop 來保證安全

  28. 推薦校驗 Send 和 Sync 實現

  29. 要遵循標準庫比較特質(trait)的不變之處

  30. 推薦使用標準庫比較特質的默認實現

  31. 推薦儘可能派生(derive)比較特質

  32. 要在 FFI 中只使用 C 兼容類型

  33. 在 FFI 邊界要使用兼容性的類型

  34. 推薦使用綁定自動生成工具

  35. 在綁定到平臺依賴類型時,要使用可移植別名 c_*

  36. 推薦在 Rust 中檢查外部類型

  37. 推薦指針類型而不是引用類型 [^1]

  38. 不要使用未檢查的外部引用

  39. 檢查外部指針

  40. 要標記 FFI 中的函數指針類型爲 extern 和 unsafe

  41. 檢查外部函數指針

  42. 建議不在 FFI 邊界使用不美容的 Rust enum 類型

  43. 建議爲外部不透明類型使用專門的 Rust 類型

  44. 推薦使用不完整的 C/C++ struct 指針來使得類型不透明

  45. 不要在 FFI 邊界使用實現了 Drop 的類型

  46. 要確保在 FFI 中清除數據所有權

  47. 推薦將外部數據包裹在可釋放內存的包裝類型

  48. 要在 FFI 中 正確地處理 panic!

  49. 推薦爲外部庫提供安全的包裝

  50. 推薦只暴露專門的 C 兼容 API

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ObPqpJ9XiDqeBA-iM2yEVw