This commit is contained in:
zlwu committed 2026-09-22 19:22:18 +08:00
1 parent 5fd0042068
commit 1e6dcb164c
94 files changed
+796 -312

No files matched your search

@@ -1,22 +1,40 @@
# SQL 注入漏洞整改说明(tenantId)
# SQL 注入漏洞整改说明(tenantId / P5)
## 背景
攻防演练报告指出智慧校园(mobile H5:`ykt.hzdyjsxy.cn:18081/#/`)存在 SQL 注入,可拖取 `sys_user` / `sys_config` 等数据。
攻防演练报告:免登接口 `POST /prod-api/auth/register` 的 `tenantId` 经多租户插件拼入 SQL,可 `extractvalue` 拖库(RuoYi-Vue-Plus XVE-2026-50962 同类问题)。
实际利用入口为后端免登接口 `POST /prod-api/auth/register` 的 `tenantId` 字段,经多租户插件拼入 SQL(与 RuoYi-Vue-Plus XVE-2026-50962 同类问题)。
## 整改措施(代码已落地)
## 整改内容(2026-09-17)
| # | 措施 | 改动位置 |
|---|------|----------|
| 1 | sink 白名单:租户 ID 仅允许 `^[0-9]{1,20}$`,非法直接抛错,不拼 SQL | `PlusTenantLineHandler`、`TenantHelper.checkTenantIdFormat` |
| # | 措施 | 位置 |
|---|------|------|
| 1 | sink 白名单:租户 ID 仅 `^[0-9]{1,20}$`,非法不拼 SQL | `PlusTenantLineHandler`、`TenantHelper.checkTenantIdFormat` |
| 2 | 注册接口先 `checkTenant`,再查注册开关 | `AuthController.register` |
| 3 | 所有 `TenantHelper.dynamic/setDynamic` 入口统一格式校验;登录 `checkTenant` 增加格式校验 | `TenantHelper`、`SysLoginService.checkTenant` |
| 4 | 删除心理咨询调试任意 SQL 接口 | 删除 `XljkConsultationDebugController` |
| 3 | 登录/动态租户入口统一格式校验 | `SysLoginService.checkTenant`、`TenantHelper.setDynamic` |
| 4 | 入参 Bean 校验 `@Pattern` | `LoginBody.tenantId`(含注册) |
| 5 | `selectRegisterEnabled` 入口再校验 | `SysConfigServiceImpl` |
| 6 | 社交登录绑定参数校验 | `AuthController.authBinding` |
| 7 | 删除心理咨询调试任意 SQL 接口 | 已删除 `XljkConsultationDebugController` |
## 发布注意
## 配套 SQL(生产建议执行)
- 需重新编译并发布 **backend** 后生效;仅发 mobile 前端无效。
- 建议同步轮换初始密码、微信 AppSecret,并审计异常访问。
- 生产环境确认 `sys.account.registerUser=false`(关闭开放注册)。
关闭开放注册,缩小免登攻击面:
```sql
UPDATE sys_config
SET config_value = 'false',
update_time = NOW()
WHERE config_key = 'sys.account.registerUser'
AND deleted = 0;
```
## 发布与验证
1. 重新编译发布 **backend**(仅发前端无效)
2. 用报告同类 payload 打 `/prod-api/auth/register`,应返回租户编号格式不正确 / 未开启注册,**不应**再出现 XPATH / SQL 报错泄密
3. 正常 `tenantId=000000` 登录不受影响
## 状态
- 代码:已完成
- 生产生效:取决于是否已用含本修复的包重启