name: differential-review description: > 执行安全为中心的代码变更差异审查(PRs、commits、diffs)。 根据代码库大小调整分析深度,使用 git 历史提供上下文,计算 影响范围,检查测试覆盖率,并生成全面的 markdown 报告。 自动检测和防止安全回归。 allowed-tools:
- 读
- 写
- Grep
- Glob
- Bash
差异安全审查
安全聚焦的代码审查,用于 PRs、commits 和 diffs。
核心原则
- 风险优先: 专注于认证、加密、价值转移、外部调用
- 基于证据: 每个发现都基于 git 历史、行号、攻击场景
- 自适应: 根据代码库大小调整(小型/中型/大型)
- 诚实: 明确说明覆盖限制和置信度
- 输出驱动: 始终生成全面的 markdown 报告文件
合理化(勿跳过)
| 合理化 | 为何错误 | 必需操作 |
|---|---|---|
| “小 PR,快速审查” | Heartbleed 漏洞仅两行代码 | 按风险分类,而非大小 |
| “我了解此代码库” | 熟悉易生盲点 | 构建明确基线上下文 |
| “Git 历史分析太耗时” | 历史揭示回归 | 切勿跳过第一阶段 |
| “影响范围显而易见” | 会错过传递调用者 | 定量计算 |
| “无测试 = 非我问题” | 缺失测试 = 风险评级提升 | 在报告中标记,提升严重性 |
| “只是重构,无安全影响” | 重构破坏不变性 | 分析为高风险,直至证明低风险 |
| “我会口头解释” | 无文档 = 发现丢失 | 始终撰写报告 |
快速参考
代码库大小策略
| 代码库大小 | 策略 | 方法 |
|---|---|---|
| 小型 (<20 文件) | 深入 | 读取所有依赖,完整 git blame |
| 中型 (20-200) | 聚焦 | 1 跳依赖,优先文件 |
| 大型 (200+) | 精确 | 仅关键路径 |
风险级别触发器
| 风险级别 | 触发器 |
|---|---|
| 高 | 认证、加密、外部调用、价值转移、验证移除 |
| 中 | 业务逻辑、状态变更、新公共 API |
| 低 | 注释、测试、UI、日志 |
工作流概述
预分析 → 阶段 0: 分诊 → 阶段 1: 代码分析 → 阶段 2: 测试覆盖率
↓ ↓ ↓ ↓
阶段 3: 影响范围 → 阶段 4: 深度上下文 → 阶段 5: 对抗 → 阶段 6: 报告
决策树
开始审查?
├─ 需要详细阶段方法?
│ └─ 阅读:methodology.md
│ (预分析 + 阶段 0-4: 分诊、代码分析、测试覆盖率、影响范围)
│
├─ 分析高风险变更?
│ └─ 阅读:adversarial.md
│ (阶段 5: 攻击者建模、利用场景、可利用性评级)
│
├─ 撰写最终报告?
│ └─ 阅读:reporting.md
│ (阶段 6: 报告结构、模板、格式指南)
│
├─ 查找特定漏洞模式?
│ └─ 阅读:patterns.md
│ (回归、重入、访问控制、溢出等)
│
└─ 仅需快速分诊?
└─ 使用上方快速参考,跳过详细文档
质量检查清单
交付前:
- [ ] 所有变更文件已分析
- [ ] Git blame 于移除的安全代码
- [ ] 高风险变更计算影响范围
- [ ] 攻击场景具体(非泛化)
- [ ] 发现引用具体行号 + 提交
- [ ] 报告文件已生成
- [ ] 用户已通知并附摘要
集成
audit-context-building 技能:
- 预分析:构建基线上下文
- 阶段 4: 高风险变更深度上下文
issue-writer 技能:
- 转换发现为正式审计报告
- 命令:
issue-writer --input DIFFERENTIAL_REVIEW_REPORT.md --format audit-report
示例用法
快速分诊(小 PR)
输入:5 文件 PR,2 高风险文件
策略:使用快速参考
1. 按文件分类风险级别(2 高,3 低)
2. 仅聚焦 2 高风险文件
3. Git blame 移除代码
4. 生成最小报告
时间:~30 分钟
标准审查(中型代码库)
输入:80 文件,12 高风险变更
策略:聚焦(见 methodology.md)
1. 高风险文件完整工作流
2. 中风险表面扫描
3. 跳过低风险文件
4. 包含所有部分完成报告
时间:~3-4 小时
深度审计(大型、关键变更)
输入:450 文件,认证系统重写
策略:精确 + audit-context-building
1. 基线上下文与 audit-context-building
2. 仅深度分析认证变更
3. 影响范围分析
4. 对抗建模
5. 综合报告
时间:~6-8 小时
何时不使用此技能
- 全新代码(无基线比较)
- 仅文档变更(无安全影响)
- 格式化/整理(表面变更)
- 用户明确要求仅快速摘要(他们接受风险)
对于这些情况,使用标准代码审查。
红旗(停止并调查)
立即升级触发器:
- 移除来自“安全”、“CVE”或“修复”提交的代码
- 访问控制修饰符移除(仅所有者、内部 → 外部)
- 验证移除而无替换
- 外部调用添加而无检查
- 高影响范围(50+ 调用者) + 高风险变更
这些模式即使在快速分诊中也需要对抗分析。
最佳结果提示
做:
- 从 git blame 开始,针对移除代码
- 尽早计算影响范围以优先
- 生成具体攻击场景
- 引用具体行号和提交
- 诚实说明覆盖限制
- 始终生成输出文件
不做:
- 跳过 git 历史分析
- 做出无证据的泛化发现
- 时间有限时声称完整分析
- 忘记检查测试覆盖率
- 错过高影响范围变更
- 仅输出报告到聊天(需要文件)
支持文档
- methodology.md - 详细阶段工作流(阶段 0-4)
- adversarial.md - 攻击者建模和利用场景(阶段 5)
- reporting.md - 报告结构和格式(阶段 6)
- patterns.md - 常见漏洞模式参考
首次用户: 从 methodology.md 开始以了解完整工作流。
经验用户: 使用此页的快速参考和决策树直接导航至所需内容。