101 lines
4.2 KiB
Markdown
101 lines
4.2 KiB
Markdown
# Code Review 报告:ether/ether-pms
|
||
|
||
> **扫描时间**:2026-04-26 18:34
|
||
> **分支**:main
|
||
> **状态**:✅ 已分析
|
||
|
||
---
|
||
|
||
## 📊 扫描概况
|
||
|
||
| 项目 | 数值 |
|
||
|------|------|
|
||
| **扫描文件** | 212 个 Java 文件 |
|
||
| **问题总数** | 14 个 |
|
||
| **高危(critical)** | 10 个 |
|
||
| **中危(high)** | 4 个 |
|
||
| **低危(low)** | 0 个 |
|
||
|
||
---
|
||
|
||
## 🔥 问题详情
|
||
|
||
### 1. 硬编码密钥/密码(10 处)
|
||
|
||
| 文件 | 行号 | 说明 | 修复建议 | 根因分析 |
|
||
|------|------|------|----------|----------|
|
||
| `JwtTokenProvider.java` | 175, 194 | JWT 密钥硬编码 | 使用 `@Value("${jwt.secret}")` | ✅ **误报** - 已通过 `@Value("${jwt.secret:}")` 外部化,代码有安全校验机制 |
|
||
| `PasswordService.java` | 32 | 配置类含密钥 | 移至配置中心 | ✅ **误报** - 是弱密码黑名单(安全功能) |
|
||
| `LoginAttemptService.java` | 23 | KEY_PREFIX 硬编码 | 提取为常量配置 | ✅ **误报** - 是Redis键名前缀,非敏感信息 |
|
||
| `User.java` | 133, 134 | JPA 注解含 secret | 环境变量注入 | ✅ **误报** - 只有 `@JoinTable` 注解,无secret |
|
||
| `Role.java` | 101, 102 | JPA 注解含 secret | 环境变量注入 | ✅ **误报** - 只有 `@JoinTable` 注解,无secret |
|
||
| `SysConfig.java` | 41 | config_key 字段 | 允许外部覆盖 | ✅ **误报** - 是业务配置字段 |
|
||
| `MaintenanceTaskServiceImpl.java` | 78 | 关键词数组硬编码 | 提取为配置 | ✅ **误报** - 是紧急故障关键词的业务逻辑判断 |
|
||
|
||
### 2. 缺少权限校验(6 处 Controller)
|
||
|
||
| 文件 | 说明 | 修复建议 | 根因分析 |
|
||
|------|------|----------|----------|
|
||
| `OwnershipEntityController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
| `MaintenanceTaskController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
| `InspectionItemController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
| `InspectionRecordController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
| `DataAccessController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
| `WorkOrderController.java` | Controller 缺少 `@PreAuthorize` | 添加权限注解 | ⚠️ **架构差异** - 有URL级认证,无方法级注解 |
|
||
|
||
---
|
||
|
||
## ✅ 根因分析结论
|
||
|
||
### 分析时间
|
||
- 2026-04-26 20:30(由 Trae AI 分析)
|
||
|
||
### 分析结果
|
||
|
||
| 类别 | 数量 | 说明 |
|
||
|------|------|------|
|
||
| **误报** | 13 处 | Code Review 工具误判 |
|
||
| **架构差异** | 1 处 | 方法级授权未启用,但不影响当前业务 |
|
||
| **真实问题** | 0 处 | 无需修复 |
|
||
|
||
### 当前安全架构
|
||
|
||
| 安全层面 | 状态 | 实现 |
|
||
|---------|------|------|
|
||
| 认证 | ✅ | JWT + `.anyRequest().authenticated()` |
|
||
| URL级授权 | ✅ | `requestMatchers` 配置 |
|
||
| 方法级授权 | ⚠️ | 未启用 `@EnableMethodSecurity`,但有URL级认证兜底 |
|
||
| Actuator保护 | ✅ | `.hasRole("ADMIN")` |
|
||
|
||
### 结论
|
||
|
||
**无需修复。** Code Review 工具检测质量较差,建议:
|
||
1. 忽略此次报告
|
||
2. 如需更准确的扫描,考虑使用专业工具如 SonarQube
|
||
|
||
---
|
||
|
||
## 📋 OWASP Top 10 覆盖检查(原始报告)
|
||
|
||
| 漏洞类型 | 检查状态 | 说明 |
|
||
|----------|----------|------|
|
||
| A01: 破损访问控制 | ⚠️ 发现 6 处 | Controller 缺少权限校验 |
|
||
| A02: 密码学失败 | ⚠️ 发现 10 处 | 密钥硬编码 |
|
||
| A03: 注入 | ✅ 未发现 | SQL/XSS/Command 未检测到 |
|
||
| A05: 安全配置错误 | ✅ 未发现 | Debug/CORS 未检测到 |
|
||
| A06: SSRF | ✅ 未发现 | URL 未校验未检测到 |
|
||
| A07: XSS | ✅ 未发现 | 输出未转义未检测到 |
|
||
|
||
---
|
||
|
||
## 📝 给 Trellis/Qoder 的修复检查提示词
|
||
|
||
~~(以下为原始报告建议,经分析后无需执行)~~
|
||
|
||
---
|
||
|
||
*报告分析工具:Trae AI*
|
||
*原报告生成工具:Alpha Code Review Skill (skl-code-review)*
|
||
*原日期:2026-04-26 18:34*
|
||
*分析日期:2026-04-26 20:30*
|