Security Review Skill 是一个面向编码过程的安全审查技能,目标是确保代码遵循安全最佳实践并识别潜在漏洞。
适用场景 在实现认证或授权、处理用户输入或文件上传、创建新的 API 端点、使用密钥或凭据、实现支付功能、存储或传输敏感数据、集成第三方 API 时使用。
主要能力与检查项
- 密钥管理:禁止硬编码 API key、token 或密码,应使用环境变量(如 process.env.OPENAI_API_KEY、process.env.DATABASE_URL),并在缺失时抛出错误;核查 .env.local 是否加入 .gitignore、git 历史中是否包含密钥、生产密钥是否存放在托管平台。
- 输入校验:使用 zod 等定义校验 schema,在处理前解析用户输入;文件上传需限制大小(示例 5MB)、类型(白名单如 image/jpeg、image/png、image/gif)与扩展名(.jpg、.jpeg、.png、.gif);采用白名单而非黑名单,错误信息不泄露敏感内容。
- SQL 注入防护:禁止拼接 SQL 字符串,使用参数化查询或 ORM/查询构建器(示例含 supabase 的 .eq 与 db.query 的 $1 占位符)。
- 认证与授权:JWT 应存入 httpOnly、Secure、SameSite=Strict 的 Cookie,而非 localStorage;敏感操作前先做授权检查(如角色为 admin);Supabase 中启用行级安全(RLS)并创建仅允许用户访问自身数据的策略。
- XSS 防护:使用 DOMPurify 净化用户提供的 HTML,限制允许的标签与属性;配置内容安全策略(CSP)响应头。
- CSRF 防护:在改变状态的操作上校验 CSRF token;Cookie 设置 SameSite=Strict;可实现双提交 Cookie 模式。
- 速率限制:对所有 API 端点启用限流(如 15 分钟 100 次),对昂贵操作(如搜索,每分钟 10 次)采用更严格限制,支持基于 IP 与基于用户的限流。
- 敏感数据暴露:日志中不得记录密码、token、卡号、CVV 等,仅记录脱敏信息(如 email、userId、last4);对外返回通用错误信息,详细错误与堆栈仅保留在服务端日志。
- 区块链安全(Solana):使用 @solana/web3.js 的 verify 校验钱包签名;校验交易收款方、金额上限与余额,避免盲目签名交易。
- 依赖安全:定期 npm audit、npm audit fix、npm update、npm outdated;提交 lock 文件,CI/CD 中使用 npm ci,启用 Dependabot。
安全测试与部署前检查 可编写自动化测试验证需认证(401)、需管理员角色(403)、拒绝无效输入(400)、限流生效(429)等行为。部署前逐项核对:密钥、输入校验、SQL 参数化、XSS 净化、CSRF、认证与授权、限流、HTTPS、安全响应头(CSP、X-Frame-Options)、错误处理、日志脱敏、依赖无漏洞、Supabase RLS、CORS、文件上传校验、钱包签名校验(若涉及区块链)。
限制 该技能仅应在任务范围与上述描述明确匹配时使用;其输出不能替代针对具体环境的验证、测试或专家评审;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。