如何确保我的依赖项使用 Safe Rust?

Ram*_*amG 6 rust rust-cargo

有没有办法在 Cargo.toml 中声明我的项目仅依赖于保证可传递使用 Safe Rust 的第 3 方板条箱?

我是 Rust 新手,Rust 对我来说也是新手。我还没有机会尝试任何东西。

Pét*_*ási 7

分析依赖关系

\n

首先,每当作者提及不安全代码的使用时,请检查 crates.io 文档。unsafe您可以通过在源代码中搜索关键字来仔细检查它。

\n

然而,检查包及其依赖项的源代码是一项乏味的工作。名为Cargo-geiger的工具提供有关板条箱及其所有依赖项中不安全使用情况的统计信息。安装后,导航到您的Cargo.toml文件并分析它:

\n
cargo geiger\n
Run Code Online (Sandbox Code Playgroud)\n

它将下载并扫描所有依赖项,然后将三个符号之一分配给一个包:

\n
Symbols: \n      = No `unsafe` usage found, declares #![forbid(unsafe_code)]\n    \xe2\x9d\x93  = No `unsafe` usage found, missing #![forbid(unsafe_code)]\n    \xe2\x98\xa2\xef\xb8\x8f   = `unsafe` usage found\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,它仅提供关键字的用法unsafe但为了进行更彻底的分析,请使用cargo-crev检查代码,以验证包依赖项的可信度和安全漏洞。此外,如果您发现不安全代码,可以向安全舞蹈存储库报告。

\n

分析项目

\n

检查完依赖关系后,就该评估您的项目了。首先,使用clippylinter 工具捕获常见错误:

\n
cargo clippy\n
Run Code Online (Sandbox Code Playgroud)\n

此外,将该#![forbid(unsafe_code)]属性添加到您的文件中以传达禁止不安全代码块的信息。我不知道你是否可以声明你的包(保证)使用安全的 Rust。README.md但您可以在删除所有unsafe代码后在文件中显示徽章:

\n
[![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)\n
Run Code Online (Sandbox Code Playgroud)\n

它将帮助其他人发现您的板条箱是安全的。

\n

请注意,Rust 中不存在 100% 的内存安全,因为标准库使用(非常谨慎)unsafe块。有时这是不可避免的。无论如何,您应该始终尝试实现安全代码,即使您会损失一点性能增益。

\n

更少的错误,更少的维护痛苦,更多的信任。

\n

进一步阅读:

\n\n

  • `#![forbid(unsafe_code)]` 不是宏,它只是一个内置属性。但这篇文章的其余部分非常详尽! (2认同)