Applicable Scenarios
- PR security review
- SAST tool scanning
- Manual code audit
- New dependency introduction assessment
- Sensitive operation review
Core Principles
1. 自动化 + 手动结合
工具找已知模式,人找业务逻辑漏洞
2. 关注输入边界
所有外部输入都不可信
-
Focus on permission checks Every write operation must verify permissions
-
Focus on sensitive data Logs / responses / caches must not contain keys / PII
## SAST 工具
| 工具 | 语言 | 特点 |
|---|---|---|
| **Semgrep** | 多语言 | 自定义规则、快 |
| **SonarQube** | 多语言 | 全面、企业级 |
| **CodeQL** | 多语言 | GitHub 原生、深度 |
| **Snyk Code** | 多语言 | AI 辅助 |
| **Bandit** | Python | Python 专用 |
| **ESLint Security** | JS/TS | 前端安全规则 |
| **SpotBugs** | Java | Java 安全 |
| **gosec** | Go | Go 安全 |
## 审查清单(每次 PR)
```text
输入校验:
□ 所有外部输入有校验(类型 / 长度 / 格式)
□ SQL 参数化(不拼接)
□ HTML 转义(防 XSS)
□ 路径不拼接用户输入(防路径穿越)
□ URL 不直接用用户输入(防 SSRF)
□ 正则不用用户输入(防 ReDoS)
认证鉴权:
□ 写操作有认证
□ 资源归属校验(不能改别人的)
□ 角色权限校验
□ 不暴露存在性
敏感数据:
□ 不日志输出密钥 / Token / PII
□ 不在响应中返回内部信息
□ 密码用 bcrypt / argon2
□ 敏感配置用环境变量
依赖:
□ 新依赖已评估(Stars / 维护 / 安全历史)
□ 版本锁定
□ 无已知高危漏洞
Supporting Templates
templates/security-review-checklist.md— PR Security Review Checklist
Quality Self-Check
□ SAST 工具集成 CI
□ 手动审查关键路径
□ 输入校验完整
□ 权限检查完整
□ 敏感数据不泄露
□ 依赖安全
□ 发现问题有修复建议
Common Pitfalls
- Only running tools without manual review——misses business logic
- Not reviewing permissions——IDOR is the most common
- Logging output tokens——leakage
- Not assessing new dependencies——introducing malicious packages
- SQL concatenation——injection
Collaboration with Other Skills
上游:
threat-modeling → 重点审查区域
下游:
security-report → 发现纳入报告
backend-engineer → 修复