Files
gochat/docs/SECURITY_AUDIT_REPORT.md
T
2026-06-04 15:44:48 +08:00

3.9 KiB
Raw Blame History

GoChat 安全审计 Review

安全基础设施清单

组件 文件 行数 状态
JWT 安全 auth/jwt_security.go - 完整
SSRF 防护 security/ssrf_protection.go - 完整
Rate Limiting middleware/rate_limit.go - 完整
MFA (TOTP) auth/mfa.go 277 完整
SAML auth/saml.go 152 ⚠️ 验证逻辑 TODO
OAuth auth/oauth.go - 完整
Webhook 签名 security/webhook_signing.go 425 完整
文件上传安全 middleware/upload_security.go 231 完整
ZIP 碎片防护 middleware/upload_security_zip.go 68 完整
XSS 防护 middleware/xss_protection.go 279 完整
安全头部 middleware/security_headers.go 138 已集成
数据加密 security/encryption.go 252 完整
SQL 安全 security/sql_safety.go 458 完整
RBAC auth/policy.go - 完整
CORS middleware/cors.go - 完整
Refresh Token auth/refresh_token.go - Redis+fallback

安全措施详细评估

1. JWT 安全

  • HMAC-SHA256 签名
  • Access Token (15min) + Refresh Token (7d)
  • Redis 存储 refresh token(防重放)
  • Claims: user_id, email, type, account_id, custom_role_id
  • Token 撤销支持

2. SSRF 防护

  • URL 白名单验证
  • 私有 IP/内部网络检测
  • DNS rebinding 防护
  • URL 重定向跟踪限制

3. Rate Limiting

  • 基于 IP + 路径的速率限制
  • 可配置窗口和阈值
  • 超限返回 429 Too Many Requests
  • Redis 后端(可选内存后端)

4. 文件上传安全

  • MIME 白名单(jpeg/png/gif/pdf/text/mp3/ogg/mp4/zip
  • 文件大小限制(默认 20MB
  • 文件名消毒(路径/特殊字符/空字节)
  • 实际 MIME 类型验证(不信任 Content-Type
  • ZIP 碎片攻击防护(压缩率+条目数检查)

5. XSS 防护

  • bluemonday HTML 净化(StrictPolicy + UGCPolicy
  • JSON 响应 HTML escaping
  • 输入字段自动清洗
  • 空字节和控制字符过滤

6. 安全头部 (已集成到 bootstrap)

  • Content-Security-Policy
  • X-Frame-Options: DENY
  • X-Content-Type-Options: nosniff
  • Strict-Transport-Security
  • Referrer-Policy
  • Permissions-Policy
  • Server header 移除

7. 数据加密

  • AES-256-GCM 加密/解密
  • 敏感字段自动加密(channel token, API key, webhook secret
  • EncryptionConfig 管理
  • EncryptField/DecryptField helpers

8. Webhook 签名

  • HMAC-SHA256 签名生成和验证
  • 时间戳时效检查(防重放攻击)
  • 多源支持(Meta, Telegram, API channel
  • 签名格式:t=<timestamp>,v1=<signature>

9. RBAC

  • PermissionMatrix 权限矩阵
  • PolicyContext.Can(action, resource) 权限检查
  • 管理员/super_admin 快速路径
  • 自定义角色权限支持
  • message create 特殊规则(agent 可发消息)

10. SQL 注入防护

  • GORM 参数化查询(默认安全)
  • sql_safety.go 审计文档
  • 避免 Raw()/Exec() 直接拼接 SQL
  • 输入验证规范

安全风险和遗留问题

风险 严重性 说明
SAML 验证未实现 auth/saml.go 有 TODO
Redis 依赖可选 Refresh Token 无 Redis 时 fallback 内存
bcrypt rounds=10 生产建议 rounds=12
CORS 配置宽松 当前允许所有来源,生产需限制
Session 管理 纯 JWT 无 server-side session

测试覆盖率评估

模块 覆盖率 评级
pkg/crypto 87.5% A
internal/model 65.8% B
internal/auth 17.6% C
internal/repository 6.3% D
internal/service 0.2% F
E2E tests 100% (9/9 PASS) A

需要改进

  • Service 层覆盖率极低(0.2%)— 关键业务逻辑缺少测试
  • Repository 层覆盖率低(6.3%)— 数据访问需要验证
  • Auth 层覆盖率中等(17.6%)— RBAC/MFA 需更多测试