Files
user-system/docs/code-review/COMPREHENSIVE_SECURITY_REVIEW_2026-04-03.md
long-agent 5b6bd93179 refactor: 整理项目根目录结构
整理内容:
- 删除 60+ 临时测试输出文件 (*.txt)
- 移动二进制文件到 bin/ 目录
- 移动 Shell 脚本到 scripts/ 目录
  - scripts/dev/: check_gitea.sh, check_sub2api.sh, run_tests.sh
  - scripts/deploy/: deploy_*.sh, simple_deploy.sh
  - scripts/ops/: fix_nginx.sh, fix_ssl.sh, install_docker.sh
  - scripts/test/: test_*.sh, test_*.bat
- 移动批处理文件到 scripts/
- 移动 Python 脚本到 tools/
- 清理临时日志文件

保留根目录必要文件:
- go.mod, go.sum, go.work
- Makefile, docker-compose.yml
- .env.example, .gitignore
- README.md, AGENTS.md, DEPLOY_GUIDE.md

验证: go build ./... && go test ./... 通过
2026-04-07 18:10:36 +08:00

129 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产级全面审查报告 - 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 ✅
```