# 2026-03-21 工作日志

## 安全与质量优化

完成以下 10 个建议级问题的修复：

### 后端 (Go)

1. **SanitizeSQL/SanitizeXSS 方法** - `internal/security/validator.go`
   - 使用正则表达式替代简单字符串替换
   - 添加 SQL 注入模式检测（UNION, DROP TABLE, xp_, sp_ 等）
   - 添加 XSS 攻击模式检测（script, iframe, event handlers 等）

2. **IP 验证正则** - `internal/security/validator.go`
   - 使用 `net.ParseIP` 替代手动正则
   - 支持所有 IPv6 格式（包括压缩格式如 ::1, fe80::1）
   - 添加 ValidateIPv4 和 ValidateIPv6 专用方法

3. **OAuth 用户名生成冲突** - `internal/service/auth.go`
   - 添加 `sanitizeUsername` 函数处理昵称
   - 添加 `generateUniqueUsername` 方法检查数据库唯一性
   - 最多 100 次重试，添加数字后缀避免冲突

4. **LIKE 搜索特殊字符** - `internal/repository/user.go`
   - 添加 `escapeLikePattern` 函数转义 % 和 _
   - 修改 Search 和 AdvancedSearch 方法使用转义后的关键字

5. **权限检查 N+1 查询** - `internal/api/middleware/auth.go`
   - 添加 `role.GetByIDs()` 批量查询方法
   - 添加 `permission.GetByIDs()` 批量查询方法
   - 添加 `rolePermission.GetPermissionIDsByRoleIDs()` 批量查询方法
   - 重构 `loadUserRolesAndPerms` 方法使用批量查询

6. **JWT JTI 使用 math/rand** - `internal/auth/jwt.go`
   - 改用 `crypto/rand` 生成 16 字节密码学安全随机数
   - 添加降级处理以应对极端情况

### 前端 (React)

7. **HTTP 请求超时** - `frontend/admin/src/lib/http/client.ts`
   - 添加 `DEFAULT_TIMEOUT = 30 * 1000` 常量
   - 使用 `AbortController` 实现超时控制
   - 添加超时错误处理和友好的错误消息

8. **App.tsx 模板代码** - `frontend/admin/src/`
   - 删除 `src/App.tsx` Vite 模板文件
   - 删除 `src/App.css` 未使用样式

9. **CSRF Token 保护** - `frontend/admin/src/lib/http/csrf.ts`
   - 创建完整的 CSRF Token 管理模块
   - 自动为 POST/PUT/DELETE/PATCH 请求添加 X-CSRF-Token 头
   - 在 AuthProvider 中集成初始化和清除逻辑

## 测试验证

- ✅ Go 编译通过 (`go build ./...`)
- ✅ Go 代码检查通过 (`go vet ./...`)
- ✅ Go 单元测试全部通过 (100+ tests)
- ✅ 前端 TypeScript 编译通过
- ✅ 前端构建成功 (npm run build)
- ✅ 前端单元测试通过 (5 tests)
