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. 推薦校驗 SendSync 實現

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

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

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

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

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

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

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

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

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

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

  39. 檢查外部指針

  40. 要標記 FFI 中的函數指針類型爲 externunsafe

  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