用途
该技能用于确保代码遵循安全最佳实践,并识别潜在漏洞。它给出一套安全审查流程与参考材料,覆盖从密钥管理到依赖安全的多个方面。技能说明要求:在执行该技能前先阅读详细指南,指南中保留了完整的流程与参考材料;其安全、前置条件和验证要求应被视为强制要求。对于聚焦任务可加载相关章节,对于端到端工作应完整阅读指南。
主要能力
技能包含以下安全主题与检查项:
-
密钥管理:不要在源码中硬编码 API 密钥、令牌或密码;应使用环境变量(如
process.env.OPENAI_API_KEY、process.env.DATABASE_URL),并验证密钥存在。验证步骤包括:无硬编码密钥;所有密钥放入环境变量;.env.local加入.gitignore;git 历史中无密钥;生产密钥放在托管平台(Vercel、Railway)。 -
输入验证:使用模式校验(示例使用 zod 定义
CreateUserSchema,对 email、name、age 校验),在处理前验证。文件上传校验包含大小(示例 5MB 上限)、类型白名单与扩展名检查。验证步骤包括:所有用户输入用模式校验;上传受限(大小、类型、扩展名);不直接使用用户输入构造查询;使用白名单而非黑名单;错误信息不泄露敏感信息。 -
SQL 注入防护:禁止拼接 SQL 字符串,应使用参数化查询(示例包括 Supabase 查询构造与
db.query('SELECT * FROM users WHERE email = $1', [userEmail]))。验证步骤包括:所有数据库查询使用参数化;SQL 中无字符串拼接;正确使用 ORM/查询构造器;Supabase 查询适当净化。 -
认证与授权:令牌不要存 localStorage(易受 XSS),应使用 httpOnly cookie,并设置
HttpOnly; Secure; SameSite=Strict; Max-Age。敏感操作前必须先做授权检查(示例检查requester.role !== 'admin'返回 403)。Supabase 行级安全(RLS)示例包含对 users 表启用 RLS,并创建仅允许查看/更新自身数据的策略。验证步骤包括:令牌存 httpOnly cookie;敏感操作前检查授权;启用 RLS;实现基于角色的访问控制;会话管理安全。 -
XSS 防护:使用 DOMPurify 净化用户提供的 HTML,并限制
ALLOWED_TAGS与ALLOWED_ATTR;配置 CSP 头(示例给出 next.config.js 中Content-Security-Policy)。验证步骤包括:净化用户提供的 HTML;配置 CSP 头;不渲染未验证的动态内容;使用 React 内置 XSS 防护。 -
CSRF 防护:在状态变更操作上校验 CSRF token(示例从
X-CSRF-Token头读取并验证);cookie 设置SameSite=Strict。验证步骤包括:状态变更操作使用 CSRF token;所有 cookie 使用SameSite=Strict;实现 double-submit cookie 模式。 -
限流:对 API 使用限流(示例 express-rate-limit,15 分钟 100 次请求);对昂贵操作(如搜索)使用更严格限流(示例每分钟 10 次)。验证步骤包括:所有 API 端点限流;昂贵操作更严格限制;基于 IP 的限流;基于用户的限流(已认证)。
-
敏感数据暴露:不要在日志中记录密码、卡号、CVV 等;记录时脱敏(示例记录 email、userId、last4)。错误响应使用通用信息(示例返回 “An error occurred. Please try again.”),详细错误只记录在服务端日志,不暴露堆栈。验证步骤包括:日志中无密码、令牌、密钥;对用户使用通用错误信息;详细错误仅在服务端日志;不向用户暴露堆栈跟踪。
-
区块链安全(Solana):验证钱包所有权(示例使用
@solana/web3.js的verify,对 message、signature、publicKey 进行验证);交易校验包括验证接收方、金额上限、余额充足,禁止盲目签名交易。验证步骤包括:验证钱包签名;校验交易详情;交易前检查余额;不盲目签名交易。 -
依赖安全:定期执行
npm audit、npm audit fix、npm update、npm outdated;提交锁文件(如package-lock.json);CI/CD 使用npm ci。验证步骤包括:依赖保持更新;npm audit无已知漏洞;提交锁文件;在 GitHub 启用 Dependabot;定期安全更新。
使用方式
技能说明要求先阅读详细指南,并保留完整流程与参考材料;指南中的安全、前置条件和验证要求为强制要求。对于聚焦任务加载相关章节,对于端到端工作完整阅读指南。技能提供各主题的正反示例代码、验证清单与自动化安全测试示例(测试认证要求返回 401、授权要求返回 403、输入校验返回 400、限流返回 429 等)。
适用场景
当任务明确匹配以下范围时使用:实现认证或授权;处理用户输入或文件上传;创建新的 API 端点;处理密钥或凭据;实现支付功能;存储或传输敏感数据;集成第三方 API。
限制
仅当任务明确匹配上述范围时使用该技能。不要将输出视为针对具体环境的验证、测试或专家评审的替代。如果缺少必需输入、权限、安全边界或成功标准,应停止并请求澄清。