6 个版本 (破坏性更新)

0.8.0 2024 年 5 月 11 日
0.7.0 2023 年 10 月 30 日
0.6.0 2023 年 10 月 5 日
0.5.0 2023 年 9 月 24 日
0.3.0 2023 年 9 月 21 日

#93Cargo 插件

Download history 106/week @ 2024-04-26 106/week @ 2024-05-03 294/week @ 2024-05-10 111/week @ 2024-05-17 107/week @ 2024-05-24 133/week @ 2024-05-31 152/week @ 2024-06-07 59/week @ 2024-06-14 73/week @ 2024-06-21 125/week @ 2024-06-28 175/week @ 2024-07-05 74/week @ 2024-07-12 62/week @ 2024-07-19 94/week @ 2024-07-26 123/week @ 2024-08-02 93/week @ 2024-08-09

每月 399 次下载

MIT/Apache

460KB
12K SLoC

Cackle / cargo acl

Rust 代码 ACL 检查器。

Cackle 是一个工具,用于分析您crate的传递依赖关系,以查看每个crate使用了哪些类型的API。

想法是查找使用您认为不应该使用的API的crate。例如,一个从其描述来看应该只进行一些数据处理,但实际上使用了网络API的crate。

安装

目前Cackle仅在Linux上运行。有关更多详细信息,请参阅PORTING.md

cargo install --locked cargo-acl

或者如果您想从git安装

cargo install --locked --git https://github.com/cackle-rs/cackle.git cargo-acl

推荐安装bubblewrap,因为它允许构建脚本(build.rs)、测试和rustc在沙盒中运行。

在具有apt的系统上,可以通过运行以下命令来完成

sudo apt install bubblewrap

用法

在您的项目根目录(包含Cargo.toml的目录)中运行

cargo acl

这将交互式引导您创建一个初始的cackle.toml。建议手动编辑您的cackle.toml。特别是,您应该查看您的依赖树,并考虑哪些crate导出了您希望限制的API。例如,如果您使用了一个提供网络API的crate,您应该在您的配置中声明这一点。有关更多详细信息,请参阅CONFIG.md

从 CI 运行

Cackle 可以在 GitHub actions 中运行。请参阅cackle-action 仓库中的说明。

功能

  • 检查您的依赖树中每个crate使用的API。
  • 忽略死代码,因此如果一个crate使用了API,但代码中没有调用该API,则不计入。
  • 限制允许使用 unsafe 的crate。
  • 一个终端UI,在发现问题时显示问题。
    • 预览检测到API使用或安全问题的地方。
    • 对于API使用,显示代码如何可达的回溯。
    • 从可应用于您的配置文件的几个编辑中选择,以允许使用。
  • 可以在沙箱中运行构建脚本、测试以限制网络和文件系统访问。
  • 每个构建脚本的沙箱配置是单独的,因此如果某个构建脚本需要额外访问,您可以仅授予该构建脚本。
  • 可以在沙箱中运行rustc,从而沙箱化所有进程宏。然而,这目前不是细粒度的,因此如果一个进程宏需要更多访问,则需要授予所有。幸运的是,需要网络访问的进程宏相对较少。

局限性和注意事项

  • 进程宏可能会检测到它在Cackle下运行并输出不同的代码。
  • 即使没有进程宏,一个crate也可能只在某些与您运行Cackle时使用的配置不匹配的配置中使用有问题的API。
  • 此工具旨在补充和辅助对第三方代码的手动审查,而不是取代它。
  • 您的配置可能未将crate提供的API定义为属于您关心的某个类别。
  • 毫无疑问,有无数种方法可以让有决心的人规避使用某些API的检测。随着时间的推移,我们可能会尝试阻止这种规避,但到目前为止,您应该肯定地假设规避是可能的。

有了所有这些局限性,这有什么意义?真正的目标是仅仅提高将问题代码无声无息地偷偷放入某个包所需的要求。Cackle的使用不应取代您本应进行的任何手动依赖项代码审查。

它的工作原理

HOW_IT_WORKS.md

常见问题解答

常见问题解答

贡献

欢迎贡献。如果您想参与其中,请通过提交问题或发送电子邮件给David Lattimore(电子邮件地址在提交日志中)联系。

许可证

此软件根据MIT许可证和Apache许可证(版本2.0)的条款分发。

见LICENSE获取详细信息。

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何旨在包含在此crate中的贡献,都应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~11–25MB
~338K SLoC