安全 Rust 的陷阱 | corrode Rust 咨询

主要观点:Rust 虽被称为“安全语言”,但仅内存安全远远不够,安全的 Rust 代码仍有诸多易被忽视的问题。
关键信息

  • 安全 Rust 中的常见陷阱,如整数溢出、类型转换错误、数组越界等,编译器有时无法检测到。
  • 介绍多种避免这些陷阱的方法,如使用检查算术运算、合适的类型转换方式、有界类型等。
  • 提及一些与安全相关的 Rust 特性和工具,如cargo-geiger检查依赖中的不安全代码,clippy可在编译时捕获诸多问题。
    重要细节
  • 整数溢出在 Rust 中可通过使用检查算术运算避免,可在Cargo.toml中开启释放模式下的溢出检查。
  • as用于数字转换有风险,应优先使用From::from()TryFrom
  • 用有界类型表达不变量可避免无效状态,如std::num::NonZeroUsize
  • 数组索引和切片操作要进行边界检查,避免使用get方法替代。
  • 对包含敏感信息的类型要谨慎实现Debug,可使用secrecy crate 或手动处理。
  • 序列化时要注意避免敏感数据泄露,可自定义序列化和反序列化方法。
  • 防止 TOCTOU 漏洞要先打开目录再进行检查。
  • 处理敏感数据使用常量时间比较。
  • 避免接受无界输入,设置请求体的大小限制。
  • Path::join处理绝对路径时可能会替换相对路径。

总结:Rust 安全编程需注意诸多细节,借助相关工具和方法可有效避免常见问题,同时结合其他安全措施可提升代码的 robustness。

阅读 7
0 条评论