用途
OWASP Security Check 是一个面向 Web 应用与 REST API 的安全审计技能,依据 OWASP Top 10 与 Web 安全最佳实践,提供系统化的安全检查模式。技能内置 20 条规则,分布在 5 个类别中。
适用时机
资料列出的适用场景包括:
- 审计代码库中的安全漏洞
- 审查用户提供的文件或文件夹的安全问题
- 检查认证/授权实现
- 评估 REST API 安全性
- 评估数据保护措施
- 审查配置与部署设置
- 生产部署之前
- 新增处理敏感数据的功能之后
使用方式
- 识别应用类型:Web 应用、REST API、SPA、SSR 或混合。
- 按优先级扫描:先 CRITICAL 规则,再 HIGH,最后 MEDIUM。
- 审查相关规则文件:从 @rules/ 目录加载具体规则。
- 报告发现:记录严重级别、文件位置与影响。
- 提供修复方案:给出具体的修复代码示例。
审计工作流
第一步:按优先级进行系统化审查
- CRITICAL:认证与授权、数据保护、输入/输出安全
- HIGH:配置与响应头
- MEDIUM:API 与监控
第二步:生成报告,格式为:
- 严重级别:CRITICAL | HIGH | MEDIUM | LOW
- 类别:规则名称
- 文件:路径与行号
- 问题:存在什么问题
- 影响:安全后果
- 修复:修复的代码示例
规则概览
认证与授权(CRITICAL)
- broken-access-control(@rules/broken-access-control.md):检查缺失授权、IDOR、权限提升。示例对比了无授权检查的直接查询与校验会话用户归属或管理员身份后再返回数据的写法。
- authentication-failures(@rules/authentication-failures.md):检查弱认证、缺失 MFA、会话问题。示例对比了仅要求密码长度至少 6 位与要求长度至少 12 位并包含大小写字母、数字、特殊字符的校验函数。
数据保护(CRITICAL)
- cryptographic-failures(@rules/cryptographic-failures.md):检查弱加密、明文存储、不良哈希。示例对比了用 MD5 哈希密码与使用带盐 bcrypt(cost 12)。
- sensitive-data-exposure(@rules/sensitive-data-exposure.md):检查日志/响应中的 PII、错误信息泄露。示例对比了直接序列化整个 user 对象与仅返回 id、username、displayName 等必要字段。
- data-integrity-failures(@rules/data-integrity-failures.md):检查未签名数据、不安全反序列化。示例对比了直接解析 JWT 载荷并信任 isAdmin 与使用 verifyJWT 校验签名。
- secrets-management(@rules/secrets-management.md):检查硬编码密钥、暴露的环境变量。示例对比了代码中硬编码 API_KEY 与从 process.env 读取并在缺失时抛错。
输入/输出安全(CRITICAL)
- injection-attacks(@rules/injection-attacks.md):检查 SQL、XSS、NoSQL、命令、路径遍历注入。示例对比了字符串拼接 SQL 与使用参数化查询(ORM findUnique)。
- ssrf-attacks(@rules/ssrf-attacks.md):检查未校验的 URL、内网访问。示例对比了直接 fetch 用户提供的 URL 与基于域名白名单校验后请求。
- file-upload-security(@rules/file-upload-security.md):检查不受限上传、MIME 校验。示例对比了不校验文件类型直接写入与校验 MIME 类型和扩展名白名单。
- redirect-validation(@rules/redirect-validation.md):检查开放重定向、未校验的重定向 URL。示例对比了直接重定向到 return 参数与校验其是否在允许路径列表中。
配置与响应头(HIGH)
- insecure-design(@rules/insecure-design.md):检查架构中的安全反模式。示例对比了依赖 x-admin-secret 请求头的“隐蔽式安全”与基于会话查询用户角色的正确 RBAC。
- security-misconfiguration(@rules/security-misconfiguration.md):检查默认配置、调试模式、错误处理。示例对比了返回 error.stack 与仅在服务端记录错误并返回通用错误信息。
- security-headers(@rules/security-headers.md):检查 CSP、HSTS、X-Frame-Options 等。示例展示了设置 Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Strict-Transport-Security 的响应头写法。
- cors-configuration(@rules/cors-configuration.md):检查过于宽松的 CORS。示例对比了同时使用通配符 Origin 与 Allow-Credentials 的写法与基于来源白名单设置。
- csrf-protection(@rules/csrf-protection.md):检查 CSRF 令牌、SameSite Cookie。示例对比了无 CSRF 防护的 Cookie 会话与设置 SameSite=Strict; Secure; HttpOnly 的 Cookie。
- session-security(@rules/session-security.md):检查 Cookie 标志、JWT 问题、令牌存储。示例展示设置 Secure、HttpOnly、SameSite=Strict、Path、Max-Age 的 Cookie。
API 与监控(MEDIUM-HIGH)
- api-security(@rules/api-security.md):检查 REST API 漏洞、批量赋值(mass assignment)。示例对比了直接把请求体数据整体更新到用户记录与显式只允许 displayName、bio 字段更新。
- rate-limiting(@rules/rate-limiting.md):检查缺失速率限制、暴力破解防护。示例对比了无限制的登录处理与基于 IP 使用 ratelimit.limit 并返回 429 的写法。
- logging-monitoring(@rules/logging-monitoring.md):检查日志不足、日志中的敏感数据。示例对比了记录 email、password、ssn 与仅记录 email、IP、时间戳等非敏感事件信息。
- vulnerable-dependencies(@rules/vulnerable-dependencies.md):检查过时依赖、已知 CVE。示例对比了直接 npm install 与定期执行 npm audit 与 npm audit fix。
常见漏洞模式速查
- 未经校验的用户输入:req.json() 后立即使用
- 缺失认证检查:没有授权中间件的路由
- 硬编码密钥:包含 password、secret、key 的字符串
- SQL 注入:查询中的字符串拼接
- XSS:dangerouslySetInnerHTML、.innerHTML
- 弱加密:用于密码的 md5、sha1
- 缺失响应头:无 CSP、HSTS 或其他安全响应头
- CORS 通配符:Access-Control-Allow-Origin: * 且带 credentials
- 不安全 Cookie:缺失 Secure、HttpOnly、SameSite 标志
- 路径遍历:未校验的文件路径中使用用户输入
严重级别速查
立即修复(CRITICAL):
- SQL/XSS/命令注入
- 敏感端点缺失认证
- 代码中硬编码密钥
- 明文存储密码
- IDOR 漏洞
尽快修复(HIGH):
- 缺失 CSRF 防护
- 弱密码要求
- 缺失安全响应头
- 过于宽松的 CORS
- 不安全的会话管理
有空修复(MEDIUM):
- 缺失速率限制
- 日志不完整
- 过时的依赖(无已知可利用漏洞)
- 非关键字段缺失输入校验
可改进(LOW):
- 缺失可选安全响应头
- 冗长错误信息(非生产环境)
- 次优的加密参数
限制
资料未提供该技能的安装命令、依赖要求、支持的运行环境、计费方式以及规则数量之外的更多技术细节,这些信息暂未提供。