--- name: backend-security-audit description: Audits backend APIs and services against input validation, SQL/command injection, path traversal, XSS/CSRF, authentication, authorization, sensitive data, logging, and file upload security. Use when reviewing backend security, hardening APIs, pre-release security checks, or when the user mentions 后端安全、安全审计、注入、越权、上传安全. --- # 后端安全审计(清单驱动) ## 何时使用 在审查服务端代码、PR、或回答「这块后端是否安全」时,按下列清单逐项核对,并结合代码证据给出结论。 ## 工作流 1. **划定范围**:列出涉及的 HTTP 路由 / RPC / 定时任务 / 消息消费者、数据库访问、子进程/Shell、文件读写与上传下载。 2. **对照清单**:对每一项标记 ✅ 已满足 / ⚠️ 部分满足 / ❌ 缺失或风险,并附**文件与行号**或关键代码片段。 3. **结论**:按严重度汇总(阻断上线 / 建议修复 / 可选加固),避免泛泛而谈。 ## 输出格式(推荐) ```markdown ## 后端安全审计摘要 - 范围:[模块/服务名] - 总体结论:[通过 / 有条件通过 / 不通过] ### 阻断项 - ... ### 建议项 - ... ### 核对清单 [复制下方对应章节 checklist,逐项填写 ✅⚠️❌ + 证据] ``` --- ## 一、输入校验与注入防护 核对时优先看:请求体/Query/Path/Header、ORM 原生 SQL、文件路径、命令行拼接、模板/HTML 输出、跨域与 CSRF 配置。 - [ ] **入参校验**:所有用户入参严格校验——长度、类型、格式、枚举范围(含空值与边界)。 - [ ] **SQL 注入**:杜绝字符串拼接 SQL;全部使用预编译参数化查询或 ORM 的安全 API。 - [ ] **路径穿越**:校验文件路径;禁止 `../` 等跳转;尽量使用白名单根目录 + `realpath`/规范化后比对前缀。 - [ ] **命令注入**:不将用户可控字符串直接拼进系统命令;若必须调用外部命令,使用固定参数列表并避免 shell。 - [ ] **XSS**:用户内容输出时转义;不将不可信数据直接当作 HTML/JS 插入(含邮件、PDF、富文本)。 - [ ] **CSRF**:关键状态变更接口校验 CSRF Token 或等价机制;CORS 不使用 `*` 搭配 credentials;白名单 Origin。 ## 二、认证与权限安全 - [ ] **会话/JWT**:合理过期与刷新策略;算法与密钥强度符合当前实践(如避免弱算法/弱密钥)。 - [ ] **密钥管理**:密钥与敏感配置不硬编码;使用环境变量、密钥管理服务或配置中心,并限制访问面。 - [ ] **鉴权覆盖面**:业务接口默认需登录;不存在误暴露的调试或管理接口。 - [ ] **接口级权限**:基于角色/权限或资源级策略;拒绝仅依赖前端隐藏按钮的「假权限」。 - [ ] **水平越权**:校验资源归属(如 `userId` 必须等于当前主体);列表/详情/更新/删除一致校验。 - [ ] **敏感操作**:改密、提现、删数据等支持二次验证(密码/OTP/设备确认等)。 - [ ] **暴力破解防护**:登录、短信、验证码等接口限流、锁定或递增延迟;统一错误信息防枚举。 ## 三、敏感数据安全 - [ ] **密码存储**:使用 bcrypt/Argon2 等慢哈希;禁止 MD5/SHA1 等作为密码存储方案。 - [ ] **PII 脱敏**:身份证、手机、银行卡等脱敏存储与展示;最小化采集与保留。 - [ ] **日志安全**:日志不打印密码、完整 Token、密钥、证件号等;结构化日志注意字段过滤。 - [ ] **静态加密**:核心敏感字段加密存储;密钥集中管理与轮换策略可执行。 - [ ] **传输安全**:对外全程 HTTPS;敏感信息不在 URL/Referer 中明文传递。 ## 四、文件上传/下载安全 - [ ] **类型校验**:后缀 + Magic bytes/MIME;不信任客户端 `Content-Type` 单独字段。 - [ ] **大小限制**:服务端限制单文件与总大小;防止 DoS。 - [ ] **文件名**:上传后随机命名;不信任用户原始文件名作为存储名或路径分量。 - [ ] **存储与执行面**:上传目录无执行权限、与应用代码分离;必要时仅通过受控下载接口访问。 - [ ] **对象存储**:优先对象存储 + 预签名 URL;避免将用户文件放在应用进程可直接执行的路径。 - [ ] **恶意文件**:禁止可执行脚本/双后缀绕过;对办公文档等按需杀毒或沙箱策略(按业务定级)。 ## 审查技巧(精简) - **SQL**:搜索字符串拼接 SQL、`fmt`/`format` 拼进查询、`$queryRawUnsafe` 等危险 API。 - **命令**:搜索 `exec`、`spawn` with `shell: true`、反引号拼接命令。 - **路径**:搜索 `path.join` 与用户输入、`fs.readFile` 与未校验路径。 - **鉴权**:从路由层 middleware 追到 handler,确认资源 ID 与主体绑定。 - **上传**:找 multer/formidable 等配置与存储路径、CDN 回源策略。 ## 附加资源(按需阅读) - 框架专项细节(Express/Fastify/Nest/Spring 等)以官方安全指南为准;本 skill 不绑定单一栈。