# 项目问题改进报告 ## 一、安全问题(Critical / High) ### 1. 多租户隔离完全失效 [CRITICAL] - **文件:** `yubb-framework/src/main/java/com/yubb/framework/handler/YubbTenantLineHandler.java` - **问题:** 整个 TenantLineHandler 实现被注释掉,多租户查询不过滤 `tenant_id`,租户间数据互通 - **修复:** 取消注释并实现 TenantLineHandler ### 2. SQL 注入风险 [CRITICAL] - **文件:** `yubb-system/src/main/java/com/yubb/platform/mapper/DynamicSqlProvider.java` - **问题:** 多处直接拼接用户输入到 SQL 字符串(`insertDynamic`、`updateDynamic`、`insertdevices`、`updatedevicesshuju` 等方法) - **修复:** 改用参数化查询,禁止字符串拼接 SQL ### 3. 硬编码密钥 [HIGH] - **文件:** `yubb-admin/src/main/resources/application.yml` - MinIO 账号密码(第 44-45 行) - 阿里云 OSS AK/SK(第 107-109 行) - 微信 appId/secret(第 121-122 行) - **文件:** `yubb-admin/src/main/java/com/yubb/web/controller/config/MqttConfig.java`(第 26 行) - **文件:** `yubb-system/src/main/java/com/yubb/platform/service/impl/TDengineMysqlconnect.java`(多处) - **修复:** 所有密钥移至环境变量或 Vault,代码中禁止明文存储 ### 4. Shiro Cookie 未设置 HttpOnly [HIGH] - **文件:** `yubb-admin/src/main/resources/application.yml`(第 92 行) - **问题:** `HttpOnly: false` 导致 session cookie 可被 JS 窃取 - **修复:** 改为 `true` ### 5. XSS 防护关闭 [HIGH] - **文件:** `yubb-admin/src/main/resources/application.yml`(第 99 行) - **问题:** `xss.enabled: false` - **修复:** 生产环境开启 --- ## 二、代码质量问题 ### 6. 硬编码管理后台绕过 [CRITICAL] - **文件:** `yubb-admin/src/main/java/com/yubb/web/controller/platform/SysPowerController.java`(第 82 行) - **问题:** `if (stationId.equals("54634575686785679498"))` 硬编码 admin ID,可跳过权限 - **修复:** 移除 hardcoded bypass,改为基于角色的权限校验 ### 7. 大量 System.out.println [MEDIUM] - **问题:** 30+ 处 `System.out.println`,分布在 DynamicSqlProvider 等生产路径 - **修复:** 替换为日志框架(logback/slf4j) ### 8. NullPointerException 风险 [MEDIUM] - **文件:** `SysPowerController.java`(第 79-82 行) - **问题:** `stationId` 可能为 null 时仍调用 `.equals()` - **修复:** 使用 `Objects.equals()` 或先判空 ### 9. 控制器职责过大(God Class) [MEDIUM] - **文件:** `yubb-admin/src/main/java/com/yubb/web/controller/platform/SysSingleController.java` - **问题:** 超过 750 行,混杂 Web 层、业务逻辑、数据格式化 - **修复:** 拆分为 Controller + Service 层 ### 10. 控制器间直接 Autowire [LOW] - **问题:** `SysSingleController` 直接 Autowire `shujuController`,违反分层原则 - **修复:** 通过 Service 层间接调用 --- ## 三、技术债 ### 11. Spring Boot 2.5.6 已 EOL [MEDIUM] - **文件:** `pom.xml`(第 45 行) - **问题:** 2021 年 7 月发布,已无安全补丁,建议升级至 2.7.x 或 3.x ### 12. pom.xml 版本不一致 [MEDIUM] - mybatis-plus:`dependencyManagement` 声明 3.5.3,实际使用 3.4.3.4(第 236、266 行) - druid:properties 声明 1.2.4,实际使用 1.1.17(第 23、322 行) - **修复:** 统一版本 ### 13. 无单元测试 [MEDIUM] - **问题:** 零测试文件,生产 SaaS 系统无任何保障 - **修复:** 补充 Controller、Service 层测试 ### 14. Maven 仓库使用 HTTP [LOW] - **文件:** `pom.xml`(第 426-428、436-438 行) - **问题:** `http://maven.aliyun.com` 非 HTTPS,存在中间人攻击风险 - **修复:** 改为 HTTPS --- ## 四、数据库问题 ### 15. tenant_id 列无索引 [HIGH] - **文件:** `sql/yb-20210820.sql` - **问题:** `tenant_id` 列未建索引,JOIN 和 WHERE 过滤时全表扫描 - **修复:** 对所有租户表的 `tenant_id` 建索引 ### 16. 租户过滤配置重复 [LOW] - **文件:** `yubb-admin/src/main/resources/application.yml`(第 150-151 行) - **问题:** `platform_role_menu` 和 `platform_user_role` 重复列出 - **修复:** 去重 --- ## 五、优先级汇总 | 优先级 | 问题 | 估计工时 | |--------|------|----------| | P0 | 多租户隔离失效 | 中 | | P0 | SQL 注入(DynamicSqlProvider) | 中 | | P0 | 硬编码密钥移除 | 小 | | P1 | 管理后台绕过漏洞 | 小 | | P1 | XSS 防护开启 | 小 | | P1 | HttpOnly Cookie 开启 | 小 | | P1 | tenant_id 建索引 | 中 | | P2 | Spring Boot 升级 | 大 | | P2 | 版本统一 | 小 | | P2 | 单元测试覆盖 | 大 | | P3 | System.out.println 替换 | 中 | | P3 | SysSingleController 重构 | 中 | | P3 | Maven HTTP → HTTPS | 小 |