3.9 KiB
3.9 KiB
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 需更多测试