# SQL 注入漏洞整改说明(tenantId / P5) ## 背景 攻防演练报告:免登接口 `POST /prod-api/auth/register` 的 `tenantId` 经多租户插件拼入 SQL,可 `extractvalue` 拖库(RuoYi-Vue-Plus XVE-2026-50962 同类问题)。 ## 整改措施(代码已落地) | # | 措施 | 位置 | |---|------|------| | 1 | sink 白名单:租户 ID 仅 `^[0-9]{1,20}$`,非法不拼 SQL | `PlusTenantLineHandler`、`TenantHelper.checkTenantIdFormat` | | 2 | 注册接口先 `checkTenant`,再查注册开关 | `AuthController.register` | | 3 | 登录/动态租户入口统一格式校验 | `SysLoginService.checkTenant`、`TenantHelper.setDynamic` | | 4 | 入参 Bean 校验 `@Pattern` | `LoginBody.tenantId`(含注册) | | 5 | `selectRegisterEnabled` 入口再校验 | `SysConfigServiceImpl` | | 6 | 社交登录绑定参数校验 | `AuthController.authBinding` | | 7 | 删除心理咨询调试任意 SQL 接口 | 已删除 `XljkConsultationDebugController` | ## 配套 SQL(生产建议执行) 关闭开放注册,缩小免登攻击面: ```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` 登录不受影响 ## 状态 - 代码:已完成 - 生产生效:取决于是否已用含本修复的包重启