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

3.3 KiB
Raw Blame History

安全测试检查清单

自动化安全扫描工具

1. OWASP ZAP

# 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

npm audit
npm audit fix

3. Snyk

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 注入测试

    phoneNumber: "13800138000' OR '1'='1"
    nickname: "'; DROP TABLE users; --"
    
  • NoSQL 注入测试

    {"accountSequence": {"$gt": 0}}
    
  • XSS 攻击测试

    nickname: "<script>alert('XSS')</script>"
    avatarUrl: "javascript:alert('XSS')"
    
  • 命令注入测试

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