# 安全测试检查清单

## 自动化安全扫描工具

### 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 安全测试
