jostled-org/pedant

GitHub: jostled-org/pedant

一款结合风格、能力与安全规则的 Rust 静态分析器,用于在构建与依赖变更时拦截潜在风险。

Stars: 6 | Forks: 0

[![crates.io](https://img.shields.io/crates/v/pedant)](https://crates.io/crates/pedant) [![docs.rs](https://img.shields.io/docsrs/pedant-core)](https://docs.rs/pedant-core) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b0df9f157b125157.svg)](https://github.com/jostled-org/pedant/actions/workflows/ci.yml) [![license](https://img.shields.io/crates/l/pedant)](LICENSE-MIT) **pedant** 映射代码的功能——网络访问、文件系统操作、加密、进程执行——涵盖 Rust、Python、JavaScript/TypeScript、Go 和 Bash。它对每次构建的依赖源进行哈希计算,并在功能发生变化时发出警报。供应链攻击在库中添加 `file_read` 或 `env_access` 功能,会在受感染的代码运行前被捕获。 ## 它能捕获的问题 依赖更新向原本只执行 HTTP 的库中添加了环境变量泄露: ``` $ pedant --diff baseline.json current.json { "added": [ {"capability": "env_access", "evidence": "std::env::var"}, {"capability": "file_read", "evidence": "std::fs::read_to_string"} ], "new_capabilities": ["env_access", "file_read"] } ``` 构建脚本在编译时拨号回家: ``` $ pedant --gate build.rs ::error:: build-script-network: build script has network access (deny) ::error:: build-script-download-exec: build script downloads and executes (deny) ``` 在 match 分支中嵌套三层: ``` $ pedant -d 2 src/lib.rs src/lib.rs:5:17: if-in-match: if inside match arm, consider match guard src/lib.rs:5:17: max-depth: nesting depth 3 exceeds limit of 2 ``` ## 快速开始 ``` # 安装 cargo install pedant # 扫描项目功能 pedant --capabilities src/**/*.rs scripts/*.py # 检查可疑模式 pedant --gate src/**/*.rs # 设置 CI 供应链监控(参见 examples/supply-chain-check.md) ``` ## CI 供应链检查 包含的 GitHub Action 对每个依赖的源进行哈希计算,并与每次构建存储的基线进行比较。它能检测到: - **标签交换攻击**——相同的版本号,内容不同(哈希不匹配) - **功能漂移**——依赖更新中出现新功能 - **新的未审计依赖项**——没有现有基线的依赖 ``` # .github/workflows/ci.yml jobs: supply-chain: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: dtolnay/rust-toolchain@a54c7afe936fefeb4456b2dd8068152669aa8211 # stable - uses: jostled-org/pedant/.github/actions/supply-chain-check@ # pin to commit with: baseline-path: .pedant/baselines fail-on: hash-mismatch ``` Pedant 与该操作使用相同的固定提交构建——无需注册表获取,仅一个信任边界。有关设置、基线管理和配置,请参见 [examples/supply-chain-check.md](examples/supply-chain-check.md)。 ## 功能检测 ``` # Rust、Python、JS/TS、Go、Bash — 自动检测语言 pedant --capabilities src/**/*.rs scripts/*.py deploy/*.sh # 证明:功能配置文件 + SHA-256 源代码哈希 + crate 标识 pedant --attestation --crate-name my-crate --crate-version 0.1.0 src/**/*.rs # 比较两个配置文件或证明 pedant --diff old.json new.json ``` | 功能 | 触发条件 | |---|---| | `network` | `std::net`、`reqwest`、`curl`、`fetch()`、`net/http`、URL 字面量 | | `file_read` | `std::fs`、`open()`、`os.Open()` | | `file_write` | `std::fs::write`、`cp`、`mv`、`rm` | | `process_exec` | `std::process`、`subprocess`、`exec`、`bash -c` | | `env_access` | `std::env::var`、`process.env`、`os.Getenv`、`export` | | `unsafe_code` | `unsafe` 块、`unsafe fn`、`unsafe impl` | | `ffi` | `extern` 块、`ctypes`、`import "C"` | | `crypto` | `ring`、`openssl`、PEM 块、十六进制密钥、凭证前缀 | | `system_time` | `SystemTime`、`chrono`、`time` | | `proc_macro` | `#[proc_macro]`、`#[proc_macro_derive]` | 门控规则默认按语言组评估。使用 `--cross-language` 合并所有发现结果。 详见 [examples/capability-detection.md](examples/capability-detection.md):输出格式、全部 24 条门控规则、多语言细节、字符串字面量分析、可信度证明和差异比较。 ## 风格检查(Rust) 五个类别共 23 项检查。嵌套检查默认启用;其余检查需要 `.pedant.toml` 配置。 ``` pedant src/**/*.rs # check files pedant -d 2 src/lib.rs # custom depth limit pedant --list-checks # see all checks pedant --explain max-depth # detailed rationale ``` | 类别 | 检查项 | |----------|--------| | 嵌套 | `max-depth`、`nested-if`、`if-in-match`、`nested-match`、`match-in-if`、`else-chain` | | 禁止模式 | `forbidden-attribute`、`forbidden-type`、`forbidden-call`、`forbidden-macro`、`forbidden-else`、`forbidden-unsafe` | | 性能与调度 | `dyn-return`、`dyn-param`、`vec-box-dyn`、`dyn-field`、`clone-in-loop`、`default-hasher` | | 结构 | `mixed-concerns`、`inline-tests`、`let-underscore-result`、`high-param-count` | | 命名 | `generic-naming` | 要以 [Claude Code 钩子](examples/pedant-claude-code-hook.md) 运行 pedant,在每次编辑时阻止 AI 生成的代码: ``` { "hooks": { "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "~/.claude/hooks/pedant-check.sh" }] } ] } } ``` ## 语义分析(Rust) 启用 `semantic` 特性后,pedant 会通过 rust-analyzer 解析类型别名,并启用数据流分析:环境变量流向网络接收器的污点跟踪、质量检查(死存储、丢弃结果)、性能检查(不必要的克隆、循环中的分配)以及并发检查(锁保护跨 await 点)。 ``` cargo install pedant --features semantic pedant --semantic --gate src/**/*.rs ``` ## MCP 服务器 `pedant-mcp` 将分析结果作为 MCP 工具暴露给 AI 代理。 ``` cargo install pedant-mcp claude mcp add --transport stdio --scope user pedant -- pedant-mcp ``` 工具:`query_capabilities`、`query_gate_verdicts`、`query_violations`、`search_by_capability`、`explain_finding`、`audit_crate`、`find_structural_duplicates`。 ## 配置 ``` # .pedant.toml max_depth = 2 forbid_else = true check_clone_in_loop = true [forbid_calls] enabled = true patterns = [".unwrap()", ".expect(*)"] [gate] build-script-exec = false # disable a rule env-access-network = "warn" # override severity [overrides."tests/**"] max_depth = 5 [overrides."tests/**".forbid_calls] enabled = false ``` 配置从 `.pedant.toml`(项目)或 `~/.config/pedant/config.toml`(全局)加载。项目配置优先。请参见 [examples/](examples/) 获取完整配置。 ## 许可证 [MIT](LICENSE-MIT) 或 [Apache-2.0](LICENSE-APACHE),由您选择。
标签:Bash, CI集成, CMS安全, GitHub Action, Go, JavaScript, Python, Ruby工具, Rust, TypeScript, 云安全监控, 代码复杂度, 供应, 依赖哈希, 关键字检测, 可视化界面, 安全扫描, 安全插件, 嵌套深度, 文件读写, 无后门, 时序注入, 环境变量访问, 网络流量审计, 网络访问, 能力检测, 行为监控, 跨语言分析, 进程执行, 通知系统, 静态分析, 静态分析工具, 风格规约