1.4 KiB
1.4 KiB
P6 整改说明:注册接口免登可被滥用
问题
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 即可。
发布注意
- 需重新编译发布 backend
- 生产执行
P6-关闭开放注册.sql(若 P5 已执行过可跳过) - 验证:
POST /prod-api/auth/register应返回「当前系统没有开启注册功能」
与 P5 关系
- P5:修
tenantIdSQL 注入(格式白名单) - P6:缩小免登注册攻击面(默认关闭 + 限流)
- 两者互补,建议一并发布