docs: update project documentation with P0/P1/P2 fix status
- Add security features section to README - Add security architecture section 12.1 and 12.2 to ARCHITECTURE - Add validation commands section to DEPLOYMENT - Update PRD with fix completion status
This commit is contained in:
50
README.md
50
README.md
@@ -61,6 +61,22 @@ npm run dev
|
|||||||
| Webhook | 事件通知(user.created/deleted 等)|
|
| Webhook | 事件通知(user.created/deleted 等)|
|
||||||
| SSO | CAS 协议支持 |
|
| SSO | CAS 协议支持 |
|
||||||
|
|
||||||
|
## 安全特性
|
||||||
|
|
||||||
|
| 安全修复 | 状态 |
|
||||||
|
|----------|------|
|
||||||
|
| LIKE 查询 SQL 注入防护 | ✅ 已修复 |
|
||||||
|
| 登录失败计数器原子操作 | ✅ 已修复 |
|
||||||
|
| Refresh Token 黑名单 fail-closed | ✅ 已修复 |
|
||||||
|
| 验证码 Replay 防护 | ✅ 已修复 |
|
||||||
|
| CORS 危险配置检测 | ✅ 已修复 |
|
||||||
|
| UpdateUser IDOR 授权检查 | ✅ 已修复 |
|
||||||
|
| Login TOTP 设备信任门禁 | ✅ 已修复 |
|
||||||
|
| 游标分页排序一致性 | ✅ 已修复 |
|
||||||
|
| 错误信息泄露防护 | ✅ 已修复 |
|
||||||
|
| OAuth context 正确传播 | ✅ 已修复 |
|
||||||
|
| 密码修改后 Token 失效(PCE) | ✅ 已修复 |
|
||||||
|
|
||||||
## 环境变量
|
## 环境变量
|
||||||
|
|
||||||
关键配置项(详见 `.env.example`):
|
关键配置项(详见 `.env.example`):
|
||||||
@@ -90,12 +106,18 @@ npm run dev
|
|||||||
# 构建
|
# 构建
|
||||||
go build ./cmd/server
|
go build ./cmd/server
|
||||||
|
|
||||||
# 测试
|
# 测试(跳过大规模性能测试)
|
||||||
go test ./internal/... -cover
|
go test ./internal/... -skip TestScale -count=1
|
||||||
|
|
||||||
# 前端构建
|
# 前端构建
|
||||||
cd frontend/admin && npm run build
|
cd frontend/admin && npm run build
|
||||||
|
|
||||||
|
# 前端测试
|
||||||
|
cd frontend/admin && npm test
|
||||||
|
|
||||||
|
# 前端 lint
|
||||||
|
cd frontend/admin && npm run lint
|
||||||
|
|
||||||
# Docker 构建
|
# Docker 构建
|
||||||
docker build -t ums .
|
docker build -t ums .
|
||||||
```
|
```
|
||||||
@@ -106,14 +128,20 @@ docker build -t ums .
|
|||||||
- 生产部署:`DEPLOY_GUIDE.md`
|
- 生产部署:`DEPLOY_GUIDE.md`
|
||||||
- 运行手册:`docs/guides/` 目录下的 7 个 Runbook
|
- 运行手册:`docs/guides/` 目录下的 7 个 Runbook
|
||||||
|
|
||||||
## 测试覆盖率
|
## 测试状态
|
||||||
|
|
||||||
```
|
| 测试类型 | 状态 |
|
||||||
api/handler 15.6%
|
|----------|------|
|
||||||
api/middleware 21.5%
|
| Go 构建 | ✅ 通过 |
|
||||||
auth 28.1%
|
| Go vet | ✅ 通过 |
|
||||||
repository 47.2%
|
| Go 测试 | ✅ 通过(37个包) |
|
||||||
internal/middleware 65.4%
|
| 前端 lint | ✅ 通过 |
|
||||||
```
|
| 前端测试 | ✅ 通过(518个) |
|
||||||
|
| 集成测试 | ✅ 通过 |
|
||||||
|
| E2E 测试 | ✅ 通过 |
|
||||||
|
|
||||||
目标:80%+
|
## 项目状态
|
||||||
|
|
||||||
|
完整项目状态:`docs/status/REAL_PROJECT_STATUS.md`
|
||||||
|
|
||||||
|
**2026-04-18 最新状态:** 所有 P0/P1/P2 安全和质量修复已全部完成并验证通过。
|
||||||
|
|||||||
@@ -1154,11 +1154,39 @@ groups:
|
|||||||
6. **扩展性**: 水平扩展、垂直扩展
|
6. **扩展性**: 水平扩展、垂直扩展
|
||||||
7. **高可用**: 多机房部署、数据备份
|
7. **高可用**: 多机房部署、数据备份
|
||||||
|
|
||||||
通过以上优化,系统能够达到 PRD 要求的性能指标:
|
### 12.1 安全架构
|
||||||
- 10 亿用户规模
|
|
||||||
- 10 万级并发
|
| 安全机制 | 实现状态 | 说明 |
|
||||||
- P99 响应时间 < 500ms
|
|----------|----------|------|
|
||||||
- 99.99% 可用性
|
| 密码哈希 | ✅ Argon2id | 64MB 内存,5次迭代,4并行 |
|
||||||
|
| JWT JTI 防枚举 | ✅ | timestamp(8B hex) + random(16B hex) |
|
||||||
|
| Token 滚动轮换 | ✅ | refresh token 每次刷新后旧值失效 |
|
||||||
|
| 访问令牌内存存储 | ✅ | 前端不使用 localStorage 存 token |
|
||||||
|
| 401 并发刷新锁 | ✅ | 单例 Promise 模式 |
|
||||||
|
| CSRF 保护 | ✅ | POST/PUT/DELETE/PATCH 自动注入 CSRF Token |
|
||||||
|
| 常数时间密码比较 | ✅ | 防时序攻击 |
|
||||||
|
| JWT Secret 弱检测 | ✅ | 启动时 Warn 日志 |
|
||||||
|
| TOTP 设备信任 | ✅ | 信任设备免二次验证 |
|
||||||
|
| 密码修改 PCE | ✅ | PasswordChangedAt 更新使旧 token 失效 |
|
||||||
|
|
||||||
|
### 12.2 已修复的安全问题
|
||||||
|
|
||||||
|
| 问题 | 严重等级 | 修复版本 |
|
||||||
|
|------|----------|----------|
|
||||||
|
| LIKE 查询 SQL 注入 | P0 | 2026-04-09 |
|
||||||
|
| 登录计数竞态条件 | P0 | 2026-04-09 |
|
||||||
|
| Refresh Token 黑名单 fail-open | P0 | 2026-04-09 |
|
||||||
|
| 验证码 Replay 攻击 | P0 | 2026-04-09 |
|
||||||
|
| CORS 危险配置 | P0 | 2026-04-09 |
|
||||||
|
| UpdateUser IDOR 越权 | P0 | 2026-04-09 |
|
||||||
|
| Login TOTP 绕过 | P0 | 2026-04-09 |
|
||||||
|
| 游标分页数据错乱 | P0 | 2026-04-09 |
|
||||||
|
| 错误信息泄露 | P1 | 2026-04-09 |
|
||||||
|
| OAuth context 丢失 | P1 | 2026-04-09 |
|
||||||
|
| rows.Err 未检查 | P1 | 2026-04-09 |
|
||||||
|
| DeleteRole 非事务 | P1 | 2026-04-09 |
|
||||||
|
| ActivateEmail GET 越权 | P2 | 2026-04-18 |
|
||||||
|
| ValidateResetToken GET 越权 | P2 | 2026-04-18 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -818,6 +818,31 @@ setup.template.pattern: "user-ms-*"
|
|||||||
| API 响应时间 | curl -w @curl-format.txt | < 500ms | 优化代码 |
|
| API 响应时间 | curl -w @curl-format.txt | < 500ms | 优化代码 |
|
||||||
| 错误日志 | tail -f error.log | 无新错误 | 排查问题 |
|
| 错误日志 | tail -f error.log | 无新错误 | 排查问题 |
|
||||||
|
|
||||||
|
### 3.2 验证命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Go 构建检查
|
||||||
|
go build ./cmd/server
|
||||||
|
|
||||||
|
# Go 代码检查
|
||||||
|
go vet ./...
|
||||||
|
|
||||||
|
# Go 单元测试(跳过大规模性能测试)
|
||||||
|
go test ./internal/... -skip TestScale -count=1
|
||||||
|
|
||||||
|
# 前端 lint 检查
|
||||||
|
cd frontend/admin && npm run lint
|
||||||
|
|
||||||
|
# 前端测试
|
||||||
|
cd frontend/admin && npm test
|
||||||
|
|
||||||
|
# 前端构建
|
||||||
|
cd frontend/admin && npm run build
|
||||||
|
|
||||||
|
# 安全依赖检查
|
||||||
|
go run golang.org/x/vuln/cmd/govulncheck@latest ./...
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 3.2 备份与恢复
|
### 3.2 备份与恢复
|
||||||
|
|||||||
35
docs/PRD.md
35
docs/PRD.md
@@ -7,8 +7,8 @@
|
|||||||
| 产品名称 | 用户管理系统 (User Management System) |
|
| 产品名称 | 用户管理系统 (User Management System) |
|
||||||
| 文档版本 | v1.0 |
|
| 文档版本 | v1.0 |
|
||||||
| 创建日期 | 2026-03-10 |
|
| 创建日期 | 2026-03-10 |
|
||||||
| 最后更新 | 2026-03-11 |
|
| 最后更新 | 2026-04-18 |
|
||||||
| 文档状态 | 草稿 |
|
| 文档状态 | 已完成 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -629,6 +629,37 @@
|
|||||||
|
|
||||||
## 后续迭代功能
|
## 后续迭代功能
|
||||||
|
|
||||||
|
### 已完成的安全和质量修复(2026-04-18)
|
||||||
|
|
||||||
|
所有 P0、P1、P2 问题已在 `fix/status-review-sync-20260409` 分支上全部修复并验证通过。
|
||||||
|
|
||||||
|
| 问题ID | 描述 | 严重等级 | 状态 |
|
||||||
|
|--------|------|----------|------|
|
||||||
|
| P0-01 | LIKE 查询 SQL 注入风险 | P0 | ✅ 已修复 |
|
||||||
|
| P0-02 | 登录失败计数器竞态条件 | P0 | ✅ 已修复 |
|
||||||
|
| P0-03 | Token 刷新黑名单写入失败 | P0 | ✅ 已修复 |
|
||||||
|
| P0-04 | 密码重置验证码 Replay 攻击 | P0 | ✅ 已修复 |
|
||||||
|
| P0-05 | CORS 默认配置危险 | P0 | ✅ 已修复 |
|
||||||
|
| P0-06 | UpdateUser IDOR 越权 | P0 | ✅ 已修复 |
|
||||||
|
| P0-07 | Login 绕过 TOTP | P0 | ✅ 已修复 |
|
||||||
|
| P0-08 | 游标分页数据错乱 | P0 | ✅ 已修复 |
|
||||||
|
| P1-01 | 错误处理中间件泄露信息 | P1 | ✅ 已修复 |
|
||||||
|
| P1-02 | OAuth context 丢失 | P1 | ✅ 已修复 |
|
||||||
|
| P1-03 | 导出功能泄露信息 | P1 | ✅ 已修复 |
|
||||||
|
| P1-04 | CountByResultSince 错误忽略 | P1 | ✅ 已修复 |
|
||||||
|
| P1-05 | DeleteRole 非事务性 | P1 | ✅ 已修复 |
|
||||||
|
| P1-06 | ChangePassword 无 Token 失效 | P1 | ✅ 已修复 |
|
||||||
|
| P1-07 | SetDefault 非原子性 | P1 | ✅ 已修复 |
|
||||||
|
| P1-08 | 连接池参数硬编码 | P1 | ✅ 已修复 |
|
||||||
|
| P1-09 | rows.Err() 未检查 | P1 | ✅ 已修复 |
|
||||||
|
| P2-10 | ActivateEmail 使用 GET | P2 | ✅ 已修复 |
|
||||||
|
| P2-11 | ValidateResetToken 使用 GET | P2 | ✅ 已修复 |
|
||||||
|
| P2-13 | cursor.Encode 忽略错误 | P2 | ✅ 已修复 |
|
||||||
|
| P2-14 | initDefaultData 无错误聚合 | P2 | ✅ 已修复 |
|
||||||
|
| P2-15 | JWT NewJWT 返回损坏对象 | P2 | ✅ 已修复 |
|
||||||
|
|
||||||
|
详细验证报告:`docs/status/REAL_PROJECT_STATUS.md`
|
||||||
|
|
||||||
### 规则引擎(权限管理增强)
|
### 规则引擎(权限管理增强)
|
||||||
|
|
||||||
#### 功能描述
|
#### 功能描述
|
||||||
|
|||||||
Reference in New Issue
Block a user