用途
security-review 是一个专门用于安全敏感代码变更的安全审查技能。其核心原则是:安全问题需要超出一般代码审查的专门关注。当代码变更触及认证、授权、用户输入、API、数据库或凭据等安全敏感路径时,该审查是强制性的。
技能启动时会声明:“I'm performing a security review of this code.”
何时必须使用
当以下任一文件模式被修改时,该技能为强制使用:
**/auth/**(如 src/auth/login.ts、lib/auth/session.js)**/security/**(如 src/security/encryption.ts)**/middleware/**(如 src/middleware/authenticate.ts)**/api/**(如 src/api/endpoints.ts)**/*password*(如 utils/passwordHash.ts)**/*token*(如 services/tokenService.ts)**/*secret*(如 config/secrets.ts)**/*credential*(如 lib/credentials.js)**/*session*(如 middleware/session.ts)**/routes/**(如 src/routes/protected.ts)**/*.sql(如 migrations/001_users.sql)
可用以下命令检查:
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|credential|session|routes|\.sql)'
OWASP Top 10 检查清单
审查需覆盖以下每个类别:
-
注入(A03:2021):检查 SQL 注入(所有查询使用参数化语句)、命令注入(用户输入不进入 shell 命令或正确转义)、LDAP 注入、XPath 注入、模板注入。示例:
db.query('SELECT * FROM users WHERE id = ?', [userId])为安全写法。 -
认证失效(A07:2021):检查密码存储(使用 bcrypt/argon2,而非 MD5/SHA1)、会话管理(Secure、HttpOnly、SameSite cookie)、令牌处理(JWT 签名、验证、短有效期)、暴力破解防护(认证端点限流)、凭据暴露(日志、错误或响应中无凭据)。
-
敏感数据暴露(A02:2021):检查传输中数据(强制 HTTPS、TLS 1.2+)、静态数据加密、代码中的密钥(无硬编码 API key、密码、令牌)、错误消息(无敏感信息)、日志(不记录敏感数据)。可用 grep 检查硬编码密钥。
-
XML 外部实体(A05:2021):检查 XML 解析是否禁用外部实体、DTD 处理是否在不需要时禁用。
-
访问控制失效(A01:2021):检查每个端点是否验证权限、直接对象引用是否针对用户校验、能否提升自身权限、CORS 是否正确限制来源、是否只接受允许的 HTTP 方法。
-
安全配置错误(A05:2021):检查默认凭据、错误处理(不向用户暴露堆栈跟踪)、安全头(CSP、X-Frame-Options 等)、调试模式(生产环境禁用)、不必要功能是否移除。
-
跨站脚本(A03:2021):检查输出编码、DOM XSS(不对用户输入使用 innerHTML)、模板安全(模板引擎自动转义)、CSP 配置。安全写法如
element.textContent = userInput;或使用 DOMPurify.sanitize。 -
不安全反序列化(A08:2021):检查对象反序列化(不反序列化不可信数据)、JSON 解析安全用法、类型验证。
-
使用已知漏洞组件(A06:2021):检查依赖审计(pnpm audit / pip audit 干净)、过时包、CVE 检查。可运行
pnpm audit --prod或pip-audit。 -
日志与监控不足(A09:2021):检查认证事件(登录成功/失败记录)、访问控制(权限拒绝记录)、输入验证失败记录、敏感操作(管理员操作记录)、日志完整性(防篡改)。
审查流程
- 识别安全敏感变更:用 git diff 列出匹配安全模式的文件。
- 审查每个文件:阅读整个文件(不仅是 diff),对照全部 10 个 OWASP 类别检查,记录发现及严重级别。
- 检查依赖:运行
pnpm audit --prod和pnpm outdated。 - 记录发现:使用严重级别——CRITICAL(可利用漏洞、数据泄露风险,合并前必须修复)、HIGH(重大安全弱点,合并前必须修复)、MEDIUM(纵深防御问题,合并前应修复)、LOW(次要改进,可在未来问题中修复)。
- 在审查产物中添加安全部分:包含安全敏感标记、审查者、OWASP 类别检查数、发现表格、依赖审计结果和审查状态(PASS/ISSUES_FIXED/ISSUES_DEFERRED)。
独立安全审查产物
如果安全审查内容较多,可作为单独评论发布,包含 Issue 编号、审查者、审查时间、已审查文件、OWASP 检查清单结果表、依赖审计结果和审查状态。
完成前检查清单
- 所有变更的安全敏感文件已审查
- 全部 10 个 OWASP 类别已检查
- 已运行依赖审计
- 所有 CRITICAL/HIGH 发现已修复
- 任何推迟的发现都有跟踪问题
- 安全部分已添加到审查产物
- 主产物中 Security-Sensitive 标记为 YES
集成
该技能由以下方式触发:安全敏感文件模式变更、显式调用、codex-subagent security-reviewer。
与以下技能集成:comprehensive-review(安全是第 4 项标准)、review-gate(验证敏感变更的安全审查)。
由以下方式强制执行:.codex/rules/security-sensitive.md 条件规则、PR 门禁自动化(安全敏感变更未经审查则阻止 PR)。