# 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=,v1=` ### 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 需更多测试