139 lines
3.5 KiB
Markdown
139 lines
3.5 KiB
Markdown
# 安全测试检查清单
|
||
|
||
## 自动化安全扫描工具
|
||
|
||
### 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 安全测试
|