rwadurian/backend/services/identity-service/test/security-test-checklist.md

139 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 安全测试检查清单
## 自动化安全扫描工具
### 1. OWASP ZAP
```bash
# Docker 运行 ZAP 扫描
docker run -v $(pwd):/zap/wrk/:rw \
-t owasp/zap2docker-stable zap-baseline.py \
-t http://localhost:3000 -g gen.conf -r testreport.html
```
### 2. npm audit
```bash
npm audit
npm audit fix
```
### 3. Snyk
```bash
npm install -g snyk
snyk test
snyk monitor
```
## 手动安全测试
### 认证和授权
- [ ] **JWT Token 安全**
- [ ] Token 在 URL 中不可见(只在 Header
- [ ] Token 过期时间合理access: 15min, refresh: 7天
- [ ] Refresh token 轮换(用过的不能再用)
- [ ] Token 包含最小必要信息
- [ ] Token 签名算法安全HS256/RS256
- [ ] **设备授权**
- [ ] 未授权设备无法使用 token
- [ ] 设备绑定无法伪造
- [ ] 设备限制最多5个有效
- [ ] **会话管理**
- [ ] 登出后 token 立即失效
- [ ] 移除设备后该设备的 token 失效
- [ ] 冻结账户后所有 token 失效
### 输入验证
- [ ] **SQL 注入测试**
```sql
phoneNumber: "13800138000' OR '1'='1"
nickname: "'; DROP TABLE users; --"
```
- [ ] **NoSQL 注入测试**
```json
{"accountSequence": {"$gt": 0}}
```
- [ ] **XSS 攻击测试**
```javascript
nickname: "<script>alert('XSS')</script>"
avatarUrl: "javascript:alert('XSS')"
```
- [ ] **命令注入测试**
```bash
deviceName: "; rm -rf /"
```
- [ ] **路径遍历测试**
```
avatarUrl: "../../etc/passwd"
```
### 业务逻辑漏洞
- [ ] **助记词安全**
- [ ] 助记词不在日志中出现
- [ ] 助记词传输加密HTTPS
- [ ] 助记词存储加密
- [ ] 助记词不在错误信息中泄露
- [ ] **身份证号安全**
- [ ] 返回时必须脱敏
- [ ] 数据库加密存储
- [ ] 不在日志中记录完整身份证号
- [ ] **暴力破解防护**
- [ ] 登录失败次数限制
- [ ] SMS 验证码尝试次数限制
- [ ] 账户序列号枚举防护
- [ ] 验证码发送频率限制
- [ ] **重放攻击防护**
- [ ] API 请求幂等性
- [ ] Nonce/时间戳验证
- [ ] **越权访问测试**
- [ ] 用户 A 无法访问用户 B 的数据
- [ ] 用户 A 无法修改用户 B 的设备
- [ ] 普通用户无法访问管理员接口
### 敏感数据保护
- [ ] **传输安全**
- [ ] 强制 HTTPS
- [ ] TLS 1.2+
- [ ] 安全的 Cipher Suite
- [ ] **存储安全**
- [ ] 密码使用 bcrypt/argon2 加密
- [ ] 助记词 AES-256-GCM 加密
- [ ] 身份证号加密存储
- [ ] 数据库连接字符串不在代码中
- [ ] **日志安全**
- [ ] 日志不包含密码
- [ ] 日志不包含完整助记词
- [ ] 日志不包含完整身份证号
- [ ] 日志不包含完整银行卡号
### CORS 和 CSRF
- [ ] CORS 白名单配置正确
- [ ] CSRF Token 验证(如果有 Web 前端)
- [ ] SameSite Cookie 设置
### 速率限制
- [ ] 全局速率限制100 req/min per IP
- [ ] 登录接口限制5 次失败锁定 15 分钟)
- [ ] SMS 发送限制1 次/分钟, 5 次/小时, 10 次/天)
- [ ] 账户创建限制1 个/IP/天)
### 依赖安全
- [ ] 所有依赖是最新稳定版
- [ ] 没有已知的 CVE 漏洞
- [ ] 定期更新依赖
## 渗透测试工具
- **Burp Suite** - 手动渗透测试
- **SQLMap** - SQL 注入自动化测试
- **Postman** - API 安全测试