AuthController 类级 @SaIgnore,POST /prod-api/auth/register 无需登录即可访问。若数据库 sys.account.registerUser=true,可被滥用于撞库、刷注册,并曾作为 SQL 注入入口(见 P5)。
| # | 措施 | 位置 |
|---|---|---|
| 1 | 配置层总开关 user.register.enabled,默认 false |
application.yml |
| 2 | Controller 最先判断配置开关,关闭则直接拒绝 | AuthController.register |
| 3 | Service 二次拦截,防止绕过 Controller | SysRegisterService.register |
| 4 | IP 限流:60 秒内最多 5 次 | @RateLimiter |
| 5 | 仍保留库开关 sys.account.registerUser 二次判断 |
原有逻辑 |
| 6 | 配套 SQL 将库开关置为 false | P6-关闭开放注册.sql |
生效条件(同时满足才会真正注册成功):
user.register.enabled=true(配置,默认已关)sys.account.registerUser=true(数据库)校园场景保持两者均为 false 即可。
P6-关闭开放注册.sql(若 P5 已执行过可跳过)POST /prod-api/auth/register 应返回「当前系统没有开启注册功能」tenantId SQL 注入(格式白名单)