Security Audit 是一个结构化的安全审计技能,用于审查代码、配置和架构中的安全漏洞,按严重性排序,并给出基于 OWASP 标准、框架特定最佳实践和 DevSecOps 控制的具体修复建议。该技能为只读分析,不修改代码——先审计,再报告。
使用方式
命令格式为 /security-audit [scope]:
- 无参数时,审计当前分支相对于默认分支的差异。
- 传入路径或模块名时,审计该范围。
- 使用 full 时,审计整个仓库以发现系统性问题。
知识库
审计基于五个参考领域。当某个发现项需要依据,或需要某主题的详细需求时,加载相应参考文件:
- OWASP Top 10(reference/owasp-top-10.md):将发现项归类到主要漏洞类别(2021 + 2025)。
- OWASP ASVS(reference/owasp-asvs.md):派生具体安全需求或构建验证清单。
- OWASP Cheat Sheet Series(reference/owasp-cheat-sheets.md):需要实用实现指南(认证、JWT、文件上传、CSRF、密码存储)。
- Node.js Security(reference/nodejs-security.md):审计 Express、NestJS、Fastify 或 Node.js 依赖/供应链问题。
- DevSecOps(reference/devsecops.md):审查 CI/CD 流水线安全、依赖/容器/密钥/SAST/DAST 扫描。
采用渐进式披露:在发现项映射到参考文件之前保持文件未加载,只加载当前发现项所需的文件。
审计流程
1. 界定范围并收集上下文
检测默认分支、获取待审计的差异、检查依赖面、枚举配置面。对于完整审计,还需枚举认证/会话代码、输入处理器、文件上传路径、数据库查询构造、加密使用、CI/CD 工作流文件和容器定义。
完成标准:识别默认分支和待审计差异;枚举所选范围的依赖和配置面;对于完整审计,列出额外的安全关键代码路径。
2. 运行检查清单
对每个变更或范围内的文件按清单逐项检查,每项映射到 OWASP Top 10 类别:
- 输入验证与注入:外部输入使用允许列表 schema 验证;SQL/NoSQL 使用参数化查询;避免用用户输入执行 OS 命令;上下文输出编码;模板引擎自动转义;防止路径遍历;防止 SSRF。
- 认证与会话:密码用 bcrypt/argon2/scrypt 哈希;MFA 可用;会话 ID 高熵、登录时轮换、登出时失效;JWT 验证签名、过期、受众;认证端点防暴力破解;无默认或弱凭据。
- 授权与访问控制:默认拒绝;对象级(IDOR)检查;角色检查在正确层;无权限提升路径;CORS 使用明确来源允许列表。
- 数据保护与加密:强制 TLS、HSTS;静态敏感数据加密;密钥在保险库/环境变量中;日志、错误、URL 中无敏感数据;仅用强算法;随机值使用 crypto;避免反序列化不可信数据。
- 配置与依赖:无硬编码密钥;生产禁用调试/详细错误页;安全头存在;依赖固定并审计;CI 使用 npm ci;文件上传验证并在 web 根目录外存储;API 和认证端点限流。
- 日志与错误处理:记录安全事件;日志不含密码、令牌或 PII;错误故障关闭而非开放;对用户返回通用错误;处理 NULL/缺失参数路径。
完成标准:每个变更或范围内文件都对照所有相关清单部分检查;每个未检查项要么确认不适用,要么记录为发现项。
3. 框架专项检查
对于 Node.js 项目,加载 reference/nodejs-security.md 并检查框架特定关注点:
- Express:helmet()、express-rate-limit、cors 允许列表、移除 X-Powered-By、请求体大小限制、原型污染防御。
- NestJS:ValidationPipe 带 whitelist + forbidNonWhitelisted、ClassSerializerInterceptor 剥离敏感字段、Guards 用于授权、helmet 中间件、throttler。
- Fastify:@fastify/helmet、@fastify/rate-limit、@fastify/cors 带来源允许列表、路由 schema 验证、@fastify/under-pressure。
- 所有框架:依赖固定、npm audit/Snyk/Socket、容器非 root 用户、事件循环阻塞(ReDoS、同步 API)、原型污染。
完成标准:识别活跃框架栈;审查匹配的框架检查并将缺口记录为发现项。
4. 流水线与部署检查
当范围包含 CI/CD 或部署时,加载 reference/devsecops.md 并验证:依赖扫描在 CI 中运行并对高/严重级设门;密钥扫描防止凭据泄露;容器扫描;SAST 在 PR 上运行;DAST 针对预发环境;IaC 扫描;最小权限(非 root 容器、只读文件系统、丢弃能力);生成 SBOM 以实现供应链可追溯。
完成标准:审查范围内的 CI/CD 和部署控制;记录缺失控制及其严重性和修复指导。
5. 排序发现项并报告
严重性分级:
- 🔴 Critical:立即、可利用的风险(SQL 注入、RCE、暴露密钥、认证破裂)。
- 🟠 High:重大关注,可能可利用(认证绕过、IDOR、敏感数据缺失授权)。
- 🟡 Medium:潜在漏洞(缺失验证、弱加密、详细错误)。
- 🟢 Low:纵深防御改进(缺失安全头、更好的日志)。
- ℹ️ Info:提示说明(版本生命周期结束、未来加固)。
输出格式包含:执行摘要(整体态势、N 个发现项统计、按影响排序的顶级建议)、发现项(每个含严重性、OWASP 类别、位置、问题、影响、建议、参考)、正面实践。每个发现项引用相关 OWASP 类别、ASVS 需求 ID 和 Cheat Sheet,使建议可追溯到标准。
完成标准:每个发现项都有严重性、位置、影响、建议和标准参考;执行摘要总计与发现项列表匹配。
指南
- 具体:每个发现项都需要开发者可执行的修复,而不仅仅描述问题。
- 映射到标准:引用 OWASP Top 10 类别,相关时引用 ASVS 需求 ID 和 Cheat Sheet。
- 验证而非假设:标记前阅读实际代码。
- 按可利用性排序:无需认证且可互联网访问的 Critical 发现项优先于管理员认证后的理论问题。
- 保持只读:审计期间绝不修改代码,使用仅检查命令(git diff、npm audit、cat、grep)。
- 注明版本:引用 OWASP Top 10 时说明使用 2021 还是 2025 版。