整理内容: - 删除 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 ./... 通过
129 lines
3.9 KiB
Markdown
129 lines
3.9 KiB
Markdown
# 生产级全面审查报告 - 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 ✅
|
||
```
|