cargo-audit v0.11:介绍 `fix` 功能、被撤回(yanked)的 crate 检测及更多

2020 年 1 月 23 日 · Tony Arcieri 代表 安全代码工作组

cargo-audit 是一个命令行工具,用于检查 Cargo.lock 文件并将其与 RustSec 安全咨询数据库进行比较,该数据库是一个由 Rust 安全代码工作组维护的社区安全漏洞数据库。

本文介绍了 cargo-audit 0.11 版本中的新特性。

cargo audit fix:自动更新有漏洞的依赖

作为我们最受欢迎的功能之一(特别是受到类似命令 npm audit fix 用户的喜爱),新的 cargo audit fix 子命令将尝试自动将有漏洞的依赖的版本要求更新为无漏洞的版本。

请注意,这是一个实验性的新功能,默认情况下未启用。要尝试使用它,请使用以下命令安装 cargo-audit

$ cargo install cargo-audit --features=fix

这将首先执行与 cargo audit 相同的审计过程,然后尝试将修复应用于您的 Cargo.toml 文件。

cargo audit fix screenshot

在底层,它使用 cargo-edit(作为一个库)来修改您的 Cargo.toml 文件,利用安全咨询中列出的固定版本要求,尝试对每个咨询中的依赖执行自动升级到无漏洞版本。

再次注意,这是一个新的实验性功能,因此很可能存在 bug。如果您担心,可以使用 cargo audit fix --dry-run 只执行空运行(dry run)。如果您确实遇到 bug,请提交 bug 报告

我们要感谢 Reza Fatahi 和 Hanif Ariffin 为贡献此功能所做的工作。

被撤回(yanked)的 crate 的警告

如上方的截图所示,cargo audit 现在会根据 crates.io 索引检查您 Cargo.lock 文件中的每个 crate,以确定其中是否有任何 crate 已被撤回(yanked)。如果已被撤回,它将如上图所示发出警告。

如果您希望将被撤回的 crate 视为硬性错误(hard failure),可以在运行 cargo audit 时加上 -D 命令行参数:

$ cargo audit -D

或者如果您更喜欢更明确的方式:

$ cargo audit --deny-warnings

与新的 Cargo.lock "V2" 格式的兼容性

Rust 1.39 版本带来了对新的对合并更友好的 Cargo.lock 格式的支持。

cargo audit 直接读取 Cargo.lock 文件,虽然 V2 格式的变化并没有破坏 cargo audit 的核心漏洞审计功能,但导致一些次要功能出现了退化,例如显示有漏洞依赖的依赖树。

本次发布还将 cargo-lock crate 升级到了 4.0 版本,该版本完整支持 V2 Cargo.lock 格式,并构建了一个在 V1 和 V2 格式下都一致的锁文件表示。

如果您在升级到 V2 Cargo.lock 格式后发现依赖树无法显示,现在它们应该又能正常工作了!

感谢阅读,希望您喜欢 cargo-audit 0.11!