SuperAPI AI 工具集

security-review

安全与审计

查看项目

更新于 10-15 10:24

技能介绍

用途

Security Review Skill 是一个代码安全审查技能,用于确保代码遵循安全最佳实践并识别潜在漏洞。它主要在以下场景激活:实现认证或授权、处理用户输入或文件上传、创建新的 API 端点、使用密钥或凭据、实现支付功能、存储或传输敏感数据、集成第三方 API。

主要能力

该技能以安全检查清单和验证步骤的形式,覆盖多个安全领域:

1. 密钥管理

避免硬编码密钥(如 const apiKey = "sk-proj-xxxxx"),改为使用环境变量(如 process.env.OPENAI_API_KEY),并验证密钥是否存在(如未配置则抛出错误)。验证步骤包括:无硬编码 API 密钥/令牌/密码、所有密钥置于环境变量、.env.local 加入 .gitignore、git 历史无密钥、生产密钥存放在托管平台(Vercel、Railway)。

2. 输入验证

使用 schema 校验(示例使用 zod)处理用户输入,例如定义 CreateUserSchema 并在处理前 parse。文件上传校验尺寸(最大 5MB)、类型(如 jpeg/png/gif)和扩展名。验证步骤包括:所有用户输入用 schema 校验、文件上传受限、不在查询中直接使用用户输入、使用白名单校验、错误信息不泄露敏感信息。

3. SQL 注入防护

禁止拼接 SQL 字符串,使用参数化查询(示例展示 Supabase 查询和 db.query('SELECT * FROM users WHERE email = $1', [userEmail]))。验证步骤包括:所有数据库查询使用参数化查询、SQL 中无字符串拼接、正确使用 ORM/查询构建器、Supabase 查询正确清理。

4. 认证与授权

JWT 令牌存储应使用 httpOnly cookie 而非 localStorage(防 XSS),示例:res.setHeader('Set-Cookie', 'token=${token}; HttpOnly; Secure; SameSite=Strict; Max-Age=3600')。授权检查需在敏感操作前验证(示例检查 requester.role !== 'admin' 返回 403)。Supabase 提供行级安全(RLS)示例,包括启用 RLS 和创建策略(如用户仅可查看/更新自身数据)。验证步骤包括:令牌存于 httpOnly cookie、敏感操作前做授权检查、启用 RLS、实现基于角色的访问控制、会话管理安全。

5. XSS 防护

使用 DOMPurify 清洗用户提供的 HTML(如 DOMPurify.sanitize(html, { ALLOWED_TAGS: ['b','i','em','strong','p'], ALLOWED_ATTR: [] })),并配置内容安全策略(CSP)头(示例为 next.config.js 中设置 CSP)。验证步骤包括:清洗用户提供的 HTML、配置 CSP 头、不渲染未验证的动态内容、使用 React 内置 XSS 防护。

6. CSRF 防护

使用 CSRF token 校验(示例检查 X-CSRF-Token 头并返回 403),并使用 SameSite cookie(SameSite=Strict)。验证步骤包括:状态变更操作使用 CSRF token、所有 cookie 设 SameSite=Strict、实现双提交 cookie 模式。

7. 速率限制

使用速率限制(示例使用 express-rate-limit),对普通 API 设置 15 分钟 100 次请求,对昂贵操作(如搜索)设置 1 分钟 10 次。验证步骤包括:所有 API 端点启用速率限制、昂贵操作更严格限制、基于 IP 的速率限制、基于用户的速率限制(已认证)。

8. 敏感数据暴露

日志中避免记录敏感数据(如密码、卡号、CVV),仅记录脱敏信息(如 last4、userId)。错误信息对用户返回通用消息,详细错误仅记录在服务器日志,不暴露堆栈跟踪。验证步骤包括:日志中无密码/令牌/密钥、对用户错误信息通用、详细错误仅在服务器日志、不向用户暴露堆栈跟踪。

9. 区块链安全(Solana)

钱包所有权验证(示例使用 @solana/web3.js 的 verify),交易验证(验证接收方、金额、余额,拒绝盲目签名)。验证步骤包括:验证钱包签名、校验交易详情、交易前检查余额、不盲目签名交易。

10. 依赖安全

使用 npm audit 检查漏洞、npm audit fix 自动修复、npm update 更新依赖、npm outdated 检查过时包。锁定文件(package-lock.json)应提交,CI/CD 使用 npm ci。验证步骤包括:依赖保持更新、无已知漏洞、锁定文件已提交、GitHub 启用 Dependabot、定期安全更新。

使用方式

资料中提供的是安全审查清单、代码正反例和验证步骤。技能在开发涉及认证、输入处理、密钥、API、支付等敏感功能时激活,帮助开发者逐项核对并修复问题。资料还包含自动化安全测试示例(如测试需认证返回 401、需管理员返回 403、拒绝无效输入返回 400、速率限制返回 429)以及“部署前安全检查清单”,涵盖密钥、输入验证、SQL 注入、XSS、CSRF、认证、授权、速率限制、HTTPS、安全头、错误处理、日志、依赖、RLS、CORS、文件上传、钱包签名等条目。

适用场景

适用于在开发过程中进行安全审查,尤其是实现认证与授权、处理用户输入与文件上传、创建 API 端点、使用密钥凭据、实现支付功能、存储或传输敏感数据、集成第三方 API 等场景。也适用于在部署前逐项自查安全性。

限制

资料未说明该技能的具体安装方式、运行环境、支持的编程语言范围、是否提供自动化扫描能力、收费或价格信息。资料中引用的 OWASP Top 10、Next.js Security、Supabase Security、Web Security Academy 仅作为资源链接列出,未提供具体内容。上述代码示例中的某些细节(如 csrf.verify、getBalance)为示意用法,资料未提供完整实现。