关于 security-review
security-review 是面向代码审查流程的安全审查技能,适用于修改认证、API、凭据等敏感代码时。它依据 OWASP Top 10 提供检查清单、审查步骤和问题分级。
主要功能
- 01识别安全敏感文件变更
- 02按 OWASP Top 10 检查
- 03审计依赖项漏洞
- 04按严重程度记录发现
- 05将安全结果写入审查报告
适用场景
- 01审查认证或会话代码变更
- 02检查 API、路由及权限控制
- 03评估输入处理和数据库代码
- 04审查凭据或密钥相关改动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ troykelly/ codex-skills --skill security-review安装后在 Claude Code 中输入/security-review确认已加载。
详细介绍
安全审查
概述
针对处理身份验证、授权、用户输入、API、数据库或凭据的代码进行专门安全审查。
核心原则: 安全问题需要超越常规代码审查的特别关注。
触发条件: 修改涉及安全敏感路径时,必须进行此审查。
开始时声明: “我正在对这段代码进行安全审查。”
必须进行审查的情况
修改以下任意文件时,必须使用此技能:
| 模式 | 示例 |
|---|---|
**/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 检查清单
逐项检查以下类别:
1. 注入(A03:2021)
| 检查项 | 验证内容 |
|---|---|
| SQL 注入 | 所有查询均使用参数化语句 |
| 命令注入 | Shell 命令中不包含用户输入,或已正确转义 |
| LDAP 注入 | LDAP 查询使用正确的转义方式 |
| XPath 注入 | XPath 查询采用参数化方式 |
| 模板注入 | 模板引擎配置安全 |
// VULNERABLE
db.query(`SELECT * FROM users WHERE id = '${userId}'`);
// SECURE
db.query('SELECT * FROM users WHERE id = ?', [userId]);
2. 身份验证失效(A07:2021)
| 检查项 | 验证内容 |
|---|---|
| 密码存储 | 密码使用 bcrypt/argon2 哈希(而非 MD5/SHA1) |
| 会话管理 | Cookie 设置了 Secure、HttpOnly、SameSite |
| 令牌处理 | JWT 已签名、经过验证且有效期较短 |
| 暴力破解防护 | 对身份验证端点进行速率限制 |
| 凭据泄露 | 日志、错误信息或响应中不包含凭据 |
3. 敏感数据泄露(A02:2021)
| 检查项 | 验证内容 |
|---|---|
| 传输中的数据 | 强制使用 HTTPS、TLS 1.2+ |
| 静态数据 | 敏感数据已加密 |
| 代码中的机密信息 | 未硬编码 API 密钥、密码或令牌 |
| 错误消息 | 错误响应中不包含敏感信息 |
| 日志记录 | 不记录敏感数据 |
# Check for hardcoded secrets
grep -rE '(password|secret|api_key|token)\s*[:=]\s*["\047][^"\047]+["\047]' src/
4. XML 外部实体(A05:2021)
| 检查项 | 验证内容 |
|---|---|
| XML 解析 | 已禁用外部实体 |
| DTD 处理 | 如非必需,已禁用 DTD 处理 |
5. 访问控制失效(A01:2021)
| 检查项 | 验证内容 |
|---|---|
| 授权检查 | 每个端点都会验证权限 |
| 直接对象引用 | 根据用户身份验证对象访问权限 |
| 权限提升 | 用户无法提升自己的权限 |
| CORS | 已正确限制来源 |
| 方法限制 | 仅接受允许的 HTTP 方法 |
6. 安全配置错误(A05:2021)
| 检查项 | 验证内容 |
|---|---|
| 默认凭据 | 未使用默认密码 |
| 错误处理 | 不向用户暴露堆栈跟踪 |
| 安全标头 | 已设置 CSP、X-Frame-Options 等 |
| 调试模式 | 在生产环境中已禁用 |
| 不必要的功能 | 已移除未使用的端点/功能 |
7. 跨站脚本(A03:2021)
| 检查项 | 验证内容 |
|---|---|
| 输出编码 | 显示前对用户输入进行编码 |
| DOM XSS | 不将用户输入用于 innerHTML |
| 模板安全 | 模板引擎会自动转义 |
| CSP | 已配置内容安全策略 |
// VULNERABLE
element.innerHTML = userInput;
// SECURE
element.textContent = userInput;
// OR
element.innerHTML = DOMPurify.sanitize(userInput);
8. 不安全的反序列化(A08:2021)
| 检查项 | 验证内容 |
|---|---|
| 对象反序列化 | 不反序列化不可信数据 |
| JSON 解析 | 安全使用 JSON.parse |
| 类型验证 | 对反序列化后的对象进行验证 |
9. 使用存在已知漏洞的组件(A06:2021)
| 检查项 | 验证内容 |
|---|---|
| 依赖项审计 | pnpm audit / pip audit 检查无问题 |
| 过时的软件包 | 不存在严重过时的依赖项 |
| CVE 检查 | 依赖项中不存在已知 CVE |
# Run dependency audit
pnpm audit --prod
# or
pip-audit
10. 日志记录与监控不足(A09:2021)
| 检查项 | 验证内容 |
|---|---|
| 身份验证事件 | 已记录登录成功/失败 |
| 访问控制 | 已记录权限拒绝 |
| 输入验证 | 已记录验证失败 |
| 敏感操作 | 已记录管理员操作 |
| 日志完整性 | 日志受到保护,防止篡改 |
审查流程
步骤 1:识别安全敏感变更
# List changed files matching security patterns
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|session)'
步骤 2:审查每个文件
对于每个安全敏感文件:
- 阅读整个文件(不只是差异)
- 对照全部 10 个 OWASP 类别进行检查
- 记录发现的问题及其严重级别
步骤 3:检查依赖项
# Audit dependencies
pnpm audit --prod
# Check for outdated
pnpm outdated
步骤 4:记录发现的问题
使用以下严重级别:
| 严重级别 | 说明 | 操作 |
|---|---|---|
| CRITICAL | 可被利用的漏洞,存在数据泄露风险 | 合并前必须修复 |
| HIGH | 严重的安全弱点 | 合并前必须修复 |
| MEDIUM | 深度防御问题 | 合并前应该修复 |
| LOW | 轻微改进 | 可以在后续问题中修复 |
步骤 5:在审查文档中添加安全部分
在主审查文档中添加:
### Security Review
**Security-Sensitive:** YES
**Reviewed By:** [WORKER_ID or codex-subagent security-reviewer]
**OWASP Categories Checked:** 10/10
#### Security Findings
| # | OWASP Category | Severity | Finding | Status |
|---|----------------|----------|---------|--------|
| 1 | A03 Injection | CRITICAL | SQL injection in findUser() | FIXED |
| 2 | A02 Sensitive Data | HIGH | API key in config.ts | DEFERRED #456 |
| 3 | A01 Access Control | MEDIUM | Missing auth on /admin | FIXED |
#### Dependency Audit
pnpm audit: 0 vulnerabilities
**Security Review Status:** [PASS|ISSUES_FIXED|ISSUES_DEFERRED]
安全审查文档(独立)
如果安全审查内容较多,请单独发布评论:
## Security Review
| Property | Value |
|----------|-------|
| Issue | #123 |
| Reviewer | `security-reviewer` subagent (codex-subagent) |
| Reviewed | 2025-12-29T10:30:00Z |
### Files Reviewed
- src/auth/login.ts
- src/middleware/authenticate.ts
- src/api/users.ts
### OWASP Checklist Results
| # | Category | Status | Notes |
|---|----------|--------|-------|
| A01 | Broken Access Control | PASS | Auth middleware on all protected routes |
| A02 | Cryptographic Failures | PASS | bcrypt for passwords, TLS enforced |
| A03 | Injection | FIXED | Parameterized SQL queries now |
| A04 | Insecure Design | PASS | - |
| A05 | Security Misconfiguration | PASS | - |
| A06 | Vulnerable Components | PASS | pnpm audit clean |
| A07 | Auth Failures | PASS | Rate limiting, secure sessions |
| A08 | Data Integrity Failures | PASS | - |
| A09 | Logging Failures | NOTE | Consider adding auth failure logging |
| A10 | SSRF | N/A | No server-side requests |
### Dependency Audit
found 0 vulnerabilities
**Security Review Status:** PASS
检查清单
完成安全审查前:
- 已审查所有变更过的安全敏感文件
- 已检查全部 10 个 OWASP 类别
- 已运行依赖项审计
- 已修复所有 CRITICAL/HIGH 级别的问题
- 所有延期处理的问题均有跟踪工单
- 已在审查文档中添加安全部分
- 已在主文档中将 Security-Sensitive 标记为 YES
集成
此技能由以下情况触发:
- 变更符合安全敏感文件模式
- 显式调用
codex-subagent security-reviewer
此技能与以下工具集成:
comprehensive-review- 安全性是第 4 项标准review-gate- 对安全敏感变更验证是否已进行安全审查
此技能由以下规则强制执行:
.codex/rules/security-sensitive.md条件规则- PR 门禁自动化(如果 PR 涉及安全敏感内容但未经过审查,则阻止 PR)
评论
支持 Markdown