用途
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 的具体集成方式,以及是否提供自动化工具支持。