diff --git a/.docs/code-review/2026-04-26/report.md b/.docs/code-review/2026-04-26/report.md new file mode 100644 index 0000000..20ce6b4 --- /dev/null +++ b/.docs/code-review/2026-04-26/report.md @@ -0,0 +1,120 @@ +# Code Review 报告:ether/ether-pms + +> **扫描时间**:2026-04-26 18:34 +> **分支**:main +> **状态**:⚠️ WARNING + +--- + +## 📊 扫描概况 + +| 项目 | 数值 | +|------|------| +| **扫描文件** | 212 个 Java 文件 | +| **问题总数** | 14 个 | +| **高危(critical)** | 10 个 | +| **中危(high)** | 4 个 | +| **低危(low)** | 0 个 | + +--- + +## 🔥 问题详情 + +### 1. 硬编码密钥/密码(10 处) + +| 文件 | 行号 | 说明 | 修复建议 | +|------|------|------|----------| +| `JwtTokenProvider.java` | 175, 194 | JWT 密钥硬编码 | 使用 `@Value("${jwt.secret}")` | +| `PasswordService.java` | 32 | 配置类含密钥 | 移至配置中心 | +| `LoginAttemptService.java` | 23 | KEY_PREFIX 硬编码 | 提取为常量配置 | +| `User.java` | 133, 134 | JPA 注解含 secret | 环境变量注入 | +| `Role.java` | 101, 102 | JPA 注解含 secret | 环境变量注入 | +| `SysConfig.java` | 41 | config_key 字段 | 允许外部覆盖 | +| `MaintenanceTaskServiceImpl.java` | 78 | 关键词数组硬编码 | 提取为配置 | + +### 2. 缺少权限校验(4 处) + +| 文件 | 行号 | 说明 | 修复建议 | +|------|------|------|----------| +| `OwnershipEntityController.java` | 18 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | +| `MaintenanceTaskController.java` | 25 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | +| `InspectionItemController.java` | 21 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | +| `InspectionRecordController.java` | 22 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | +| `DataAccessController.java` | 20 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | +| `WorkOrderController.java` | 24 | Controller 缺少 `@PreAuthorize` | 添加权限注解 | + +--- + +## 📋 OWASP Top 10 覆盖检查 + +| 漏洞类型 | 检查状态 | 说明 | +|----------|----------|------| +| A01: 破损访问控制 | ⚠️ 发现 6 处 | Controller 缺少权限校验 | +| A02: 密码学失败 | ⚠️ 发现 10 处 | 密钥硬编码 | +| A03: 注入 | ✅ 未发现 | SQL/XSS/Command 未检测到 | +| A05: 安全配置错误 | ✅ 未发现 | Debug/CORS 未检测到 | +| A06: SSRF | ✅ 未发现 | URL 未校验未检测到 | +| A07: XSS | ✅ 未发现 | 输出未转义未检测到 | + +--- + +## 🎯 修复优先级 + +### 🔴 高优先级(立即修复) +1. **密钥/密码硬编码**(10 处) + - 步骤:替换为 `@Value("${xxx}")` 或配置中心 + - 影响:严重安全风险 + +### 🟠 中优先级(本周修复) +2. **缺少权限校验**(6 处 Controller) + - 步骤:添加 `@PreAuthorize("hasPermission('xxx')")` + - 影响:未授权访问风险 + +--- + +## 🧪 验收标准 + +修复后需满足: +- ✅ 无明文密钥/密码(全部通过环境变量或配置中心注入) +- ✅ 所有 Controller 方法有 `@PreAuthorize` 注解 +- ✅ 重新运行 `skl_code_review.py` → `status: ok` + +--- + +## 📝 给 Trellis/Qoder 的修复检查提示词 + +``` +请按以下标准修复代码安全问题: + +## 高优先级(Critical) + +1. **硬编码密钥/密码(10 处)** + - 检查所有包含 secret/password/key 的硬编码字符串 + - 用环境变量或 `@Value("${key.name}")` 替换 + - 特别关注:JwtTokenProvider.java, PasswordService.java, LoginAttemptService.java + +2. **缺少权限校验(6 处 Controller)** + - Controller 类缺少 `@PreAuthorize` 注解 + - 添加方法级权限:`@PreAuthorize("hasPermission('xxx')")` + - 特别关注:所有 `*Controller.java` 类 + +## 验收标准 + +✅ 密钥/密码必须来自 `@Value` 或配置中心 +✅ 所有 Controller 方法必须有权限注解 +✅ 禁止在代码中出现明文 secret/password +✅ 通过 OWASP Top 10 审计 + +## 修复后重新扫描 + +运行: +```bash +python3 skl_code_review.py +``` +确保 `status: ok` +``` + +--- + +*报告生成工具:Alpha Code Review Skill (skl-code-review)* +*日期:2026-04-26 18:34*