SuperAPI AI 工具集

rust-strict

安全与审计

查看项目

更新于 10-15 07:42

技能介绍

用途

rust-strict 是一套 Rust 安全与严格性规则,用于在编写、审查或审计 Rust 代码时补充已有的 rust-skills(179 条通用规则)。这些规则源自 5 个生产级 Rust 项目,目标是减少 unsafe 滥用、错误处理不当、并发死锁、密钥泄露、命令注入等风险。

主要能力

工作区 Lint 配置

每个 Rust 项目都应配置工作区 lint。基线配置在 Cargo.toml(工作区根)中设置 [workspace.lints.rust] 的 unsafe_code = "deny"、unused_qualifications = "deny",以及 [workspace.lints.clippy] 的 unwrap_used = "deny"、expect_used = "deny"。各 crate 通过 [lints] workspace = true 选择启用。例外情况需按 feature 门控,绝不全局放开,例如 FFI crate 使用 #![cfg_attr(feature = "local-llm", allow(unsafe_code))];静态初始化(regex、lazy)是唯一可接受的 expect() 场景。

错误处理层级

库 crate 使用 thiserror 定义结构化错误枚举,应用 crate 使用 anyhow 灵活传播。Tauri 命令返回 Result<T, String>(框架约束)。禁止使用 Box<dyn Error>,应使用领域特定枚举。

Unsafe 审计规则

明确何时可接受 unsafe(如带运行时特性检测的 SIMD 内建函数、测试专用环境变量操作,且必须附 SAFETY 注释),以及何时绝不可接受(字符串/缓冲区操作、无边界证明的指针运算、transmute、手动实现 Send/Sync 等)。

并发安全

禁止在 .await 或磁盘 I/O 期间持有 RwLock/Mutex;标志和计数器使用原子类型,集合和复杂数据使用 RwLock,关闭信号使用 watch 通道;所有缓存使用有界 BoundedMap(容量 + TTL)防止内存泄漏。

密钥处理

密钥存入 Keychain,绝不写入明文文件;二进制中硬编码字符串使用 obfstr!() 混淆;存储密钥时校验空字符串。

输入校验(Tauri 命令)

所有命令输入用枚举约束,避免命令注入;临时文件使用 tempfile crate,避免可预测路径和符号链接攻击。

依赖规则

显式控制 feature;优先 rustls-tls 而非 native-tls;使用工作区依赖继承。

类型安全模式

为 ID 和单位使用 newtype;对不应被静默丢弃的结果加 #[must_use];算术运算显式处理溢出(checked_、saturating_、wrapping_*)。

Edition 2024

涵盖外部符号需包裹在 unsafe extern "C" 块中、unsafe_op_in_unsafe_fn 默认警告、RPIT 使用 use<...> 显式捕获生命周期、gen 成为保留关键字、使用 tracing 做结构化日志等迁移要点。

发布配置

分别给出桌面应用(最小二进制)、服务器/网关(平衡)、开发(快速编译)的 profile 配置建议。

漏洞检查清单

包括:无 SAFETY 注释的 unsafe 块、生产代码中的 unwrap/expect、字符串构造命令、可预测临时文件路径、源码中的密钥、无界缓存、跨 await 或磁盘 I/O 持有的锁、Tauri CSP 配置、cargo audit 通过、cargo clippy 无警告等。

使用方式

资料未提供具体的安装命令或调用步骤。该规则集以规则文档形式呈现,供编写、审查或审计 Rust 代码时参照执行。

适用场景

适用于 Rust 项目的开发、代码审查与安全审计,尤其是涉及 FFI、并发、密钥管理、Tauri 桌面应用和依赖治理的场景。

限制

资料未说明该规则集的授权方式、版本管理、与 rust-skills 的具体集成方式,以及是否提供自动化工具支持。