Files
user-system/docs/code-review/COMPREHENSIVE_SECURITY_REVIEW_2026-04-03.md

129 lines
3.9 KiB
Markdown
Raw Normal View History

# 生产级全面审查报告 - 2026-04-03
**审查范围**: Go 后端 + React/TypeScript 前端 + 架构设计
**审查方法**: 多智能体深度审查 (并发/安全/前端/架构)
---
## 执行摘要
| 维度 | 得分 | 严重问题 |
|------|------|----------|
| 后端安全 | 5/10 | CRITICAL x2, HIGH x6 |
| 前端安全 | 8/10 | MEDIUM x1 |
| 并发生命周期 | 8/10 | LOW x2 |
| 架构设计 | 7/10 | MEDIUM x2 |
| **综合** | **6.5/10** | 共 27 个问题 |
---
## 🔴 CRITICAL 问题 (2个)
### 1. BootstrapAdmin 端点无认证保护
- **文件**: `router.go:116`
- **问题**: `/auth/bootstrap-admin` 仅限流,无认证中间件
- **影响**: 攻击者可创建初始管理员账号
### 2. 错误信息泄露给客户端
- **文件**: `auth_handler.go:381`
- **问题**: `handleError` 返回原始 `err.Error()` 给客户端
- **影响**: 数据库错误、文件路径等内部信息泄露
---
## 🟠 HIGH 问题 (6个)
### 3. 主题 CustomCSS/CustomJS 存储型 XSS
- **文件**: `theme_handler.go`
- **影响**: 管理员可注入恶意 JS 到所有用户页面
### 4. GetUserDevices IDOR 漏洞
- **文件**: `device_handler.go:159`
- **影响**: 任何用户可查询其他用户的设备列表
### 5. TOTP 恢复码非恒定时间比较
- **文件**: `totp.go`
- **影响**: 时序攻击可逐步暴破恢复码
### 6. 短信/邮件验证码非恒定时间比较
- **文件**: `sms.go:360`, `email.go:170`
- **影响**: 时序攻击可逐步暴破验证码
### 7. 缓存一致性问题 (用户数据变更不清除缓存)
- **文件**: `user_service.go`
- **影响**: 密码修改后 15 分钟内缓存用户信息仍为旧数据
### 8. Redis 失败时安全路径静默失败
- **影响**: 登录计数/令牌黑名单在 Redis 错误时静默失败
---
## 🟡 MEDIUM 问题 (12个)
| # | 问题 | 文件 |
|---|------|------|
| 9 | CORS 通配符 + AllowCredentials | cors.go |
| 10 | OAuth implicit flow token 暴露在 URL | sso_handler.go |
| 11 | 内存限流可被重启绕过 | ratelimit.go |
| 12 | CAS XML 解析用字符串操作 | cas.go |
| 13 | SanitizeXSS 自毁式还原 | validator.go |
| 14 | 桩端点返回 200 而非 501 | auth_handler.go |
| 15 | 操作日志超时太短 (3s) | operation_log.go |
| 16 | StateManager 清理未启动 (死代码) | state.go |
| 17 | SSO IntrospectToken 锁升级竞态 | sso.go |
| 18 | Webhook 重试任务关闭时丢失 | webhook.go |
| 19 | 密码策略默认太弱 | auth.go |
| 20 | 邮箱验证码分布不均匀 | email.go |
---
## 🟢 LOW/INFO 问题 (7个)
| # | 问题 | 严重度 |
|---|------|--------|
| 21 | 密码策略默认太弱 | LOW |
| 22 | 邮箱验证码非均匀分布 | LOW |
| 23 | Regex 未预编译 | LOW |
| 24 | RSA 密钥 2048 位 | LOW |
| 25 | SSO 内存会话无持久化 | INFO |
| 26 | JWT 黑名单 TTL 受限于令牌剩余寿命 | INFO |
| 27 | Webhook SSRF DNS 重绑定风险 | INFO |
---
## ✅ 正面安全实践
1. **Argon2id 密码哈希** - 64MB 内存5 次迭代
2. **参数化查询** - 所有 Repository 使用 GORM 参数化
3. **LIKE 注入防护** - `escapeLikePattern()` 正确使用
4. **Webhook SSRF 防护** - `isSafeURL()` 阻止内网地址
5. **HMAC 签名** - Webhook 载荷使用 HMAC-SHA256
6. **RBAC 中间件** - 细粒度权限检查
7. **限流** - 内存 + Redis 双限流实现
8. **登录异常检测** - 暴力破解/新位置/新设备检测
9. **设备信任机制** - 用户可审查和撤销信任设备
10. **恢复码 Argon2id 哈希** - 存储前哈希
---
## 修复优先级
| 优先级 | 问题 | 工作量 |
|--------|------|--------|
| P0 | BootstrapAdmin 认证 + 错误信息泄露 | 小 |
| P1 | IDOR + 存储型 XSS + 时序攻击 | 中 |
| P2 | 缓存一致性 + Redis 静默失败 | 中 |
| P3 | 其他 MEDIUM/LOW 问题 | 大 |
---
## 验证矩阵
```
go build ./... ✅
go test ./... ✅
go vet ./... ✅
npm run build ✅
npm run lint ✅
```