云链智安
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

IMPROVEMENTS.md 4.6KB

项目问题改进报告

一、安全问题(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 字符串(insertDynamicupdateDynamicinsertdevicesupdatedevicesshuju 等方法)
  • 修复: 改用参数化查询,禁止字符串拼接 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_menuplatform_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