brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
security-audit服务上线前的 AI 安全审查,聚焦需要理解代码语义和业务逻辑的安全问题。 覆盖注入防护、认证授权、敏感数据处理、配置安全、业务安全 5 个维度。 适用于 JS/TS 前端、TS/Python 后端项目。 CI/CD 自动化检测(依赖漏洞、敏感信息 grep)不在本 skill 范围内,由流水线承担。 触发词:安全审计、安全检查、上线前检查、有没有漏洞、security audit。 触发场景:release 发版前(强制)、涉及认证/支付/用户数据的改动后(建议)、用户主动要求。
Independent GitHub snapshot · Automated classification · Original documentation governs
CI/CD 拦确定性问题(依赖漏洞、硬编码密钥),本 skill 审需要理解力的问题(数据流追踪、业务逻辑安全)。 两者互补,不重复。
收到审计请求
│
├─ 快速扫描(单模块 / 局部改动 / 敏感模块修改后)
│ 选 1-2 个最相关的维度检查
│ 产出:终端输出结果,不生成报告
│
└─ 完整审计(release 发版前 / 新服务首次上线 / 重大安全相关改动)
5 个维度全量检查
产出:docs/audits/YYYY-MM-DD-<服务名>-audit.md
AskUserQuestion 确认,不要猜package.json / requirements.txt / pyproject.toml / tsconfig.json按以下 5 个维度逐一检查。每个维度都需要读代码,不是凭印象判断。
审查目标:用户可控的输入是否经过正确处理后才进入危险操作。
检查清单:
| 注入类型 | 关注点 | 安全做法 |
|---|---|---|
| SQL 注入 | 原生 SQL 拼接、ORM 的 raw query | 参数化查询、预编译语句 |
| 命令注入 | exec()、child_process、os.system()、subprocess | 避免拼接用户输入到命令,用参数数组 |
| XSS | innerHTML、dangerouslySetInnerHTML、模板中的未转义输出 | 输出转义、CSP 头、避免直接插入 HTML |
| 路径遍历 | 用户输入拼接文件路径、../ 未过滤 | 路径规范化、白名单校验、path.resolve 后检查前缀 |
| SSRF | 用户输入作为 URL 发起服务端请求 | URL 白名单、禁止内网地址、DNS rebinding 防护 |
| 模板注入 | 用户输入直接进入模板引擎渲染 | 避免动态模板编译、使用沙箱 |
审查方法:
审查目标:确保每个需要保护的资源都有正确的认证和授权检查。
检查清单:
| 检查项 | 关注点 |
|---|---|
| 认证覆盖 | 有没有接口"裸奔"——应该要登录但没加认证中间件? |
| 授权粒度 | 用户 A 能不能通过改 ID 访问用户 B 的数据?(IDOR) |
| JWT/Session | 密钥强度、过期时间、刷新机制、注销是否真的失效 |
| CORS 策略 | Access-Control-Allow-Origin 是否过于宽松(*)?credentials 模式下的 origin 检查 |
| 密码策略 | 密码是否 bcrypt/argon2 哈希存储、是否有强度要求 |
| 权限绕过 | 前端隐藏 ≠ 后端鉴权,检查是否只在前端做了权限判断 |
审查方法:
审查目标:敏感数据在存储、传输、日志中是否得到正确保护。
检查清单:
| 检查项 | 关注点 |
|---|---|
| 密码存储 | 是否用了 bcrypt/argon2?是否明文或 MD5/SHA1? |
| 加密算法 | 是否使用了已知弱算法(DES、RC4、MD5 用于加密) |
| 日志脱敏 | 日志里有没有打印密码、token、手机号、身份证号 |
| 错误信息 | 异常响应是否泄露了堆栈、SQL 语句、内部路径 |
| 数据传输 | 敏感 API 是否强制 HTTPS?cookie 是否设置 Secure 和 HttpOnly |
| 前端存储 | token 存 localStorage(可被 XSS 窃取)还是 httpOnly cookie? |
审查方法:
console.log、logger.、print),检查是否包含敏感字段审查目标:安全相关配置是否合理,生产环境是否加固。
检查清单:
| 检查项 | 关注点 |
|---|---|
| 安全响应头 | X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security、CSP |
| Debug 模式 | 生产环境是否关闭 debug/详细错误输出 |
| 默认凭证 | 是否存在默认密码、测试账号、admin/admin |
| 速率限制 | 登录、注册、验证码等接口是否有 rate limit |
| 文件上传 | 是否限制文件类型、大小?存储路径是否在 web 可访问目录外? |
| 环境隔离 | 生产配置和开发配置是否分离?环境变量是否正确引用 |
审查目标:识别需要理解业务语义才能发现的安全风险。
检查清单:
| 检查项 | 关注点 |
|---|---|
| 越权访问(IDOR) | 修改请求中的 ID/参数能否访问他人数据 |
| 批量枚举 | 用户名/邮箱是否可被枚举(注册/登录/找回密码的不同返回) |
| 竞态条件 | 余额扣减、库存扣减、优惠券核销是否有并发保护 |
| 逻辑绕过 | 支付金额是否可在前端篡改?流程步骤是否可跳过? |
| 重放攻击 | 关键操作是否有幂等性保护或 nonce 机制 |
| 信息泄露 | API 响应是否返回了多余字段(如其他用户的信息、内部 ID) |
审查方法:
每个发现按以下标准分级:
| 等级 | 标准 | 处理要求 |
|---|---|---|
| 高危 | 可直接导致数据泄露、未授权访问、代码执行 | 必须修复后才能上线,给出具体修复代码 |
| 中危 | 存在利用条件但风险可控,或防御纵深不足 | 建议修复,给出修复方向 |
| 低危 | 最佳实践缺失,短期内风险较小 | 记录待改进,不阻断上线 |
分级原则:
完整审计时,生成报告到 docs/audits/YYYY-MM-DD-<服务名>-audit.md:
# 安全审计报告:<服务名>
## 审计概览
- 审计日期:YYYY-MM-DD
- 审计范围:<目录/模块列表>
- 技术栈:<自动识别结果>
- 风险摘要:🔴 X 高危 / 🟡 X 中危 / 🟢 X 低危
## 审计结论
**✅ 通过** / **⚠️ 有条件通过(需修复高危后上线)** / **❌ 不通过**
## 详细发现
### 1. 注入防护
(发现 / 无风险)
### 2. 认证与授权
(发现 / 无风险)
### 3. 敏感数据处理
(发现 / 无风险)
### 4. 配置安全
(发现 / 无风险)
### 5. 业务安全
(发现 / 无风险)
## 修复清单
| # | 等级 | 维度 | 问题描述 | 文件位置 | 修复建议 |
|---|------|------|---------|---------|---------|
## 历史审计
- [上次审计](链接)(如有)
每个发现必须包含:
CI/CD 安全流水线(自动化,确定性)
├─ pre-commit: gitleaks 拦截敏感信息
└─ PR Check: 依赖漏洞 + 静态规则扫描
│
↓ 自动化通过后
security-audit(本 skill,AI 审查)
├─ task-finish 提示:涉及敏感模块时建议快速扫描
└─ release 强制:发版前完整审计
│
↓ 审计通过
release — 发版
审计报告目录:docs/audits/,命名格式 YYYY-MM-DD-<服务名>-audit.md
code-walkthrough 或快速阅读理解业务逻辑,再做安全审查。脱离业务的安全审查是低效的