后台登录防爆破
- 现有后台账户密码或短信验证码验证累计失败 5 次,持久锁定,并将账户 status 置为 0;没有自动解锁时间。
- /manage/user/login、/manage/admin/login 和两者的 /get/loginInfo 共用对应账户计数;换 IP、重启服务不清除。
- 正确密码预检查不清零;通过完整短信验证或微信认证才清零。短信未获取、缺失、过期及不匹配均计失败。
- 微信登录也检查锁定状态;普通后台启用账号、重置密码不能绕过独立锁表。
- 触发锁定后注销当前后台登录域同 ID 会话。旧 admin 与 cms_user 复用该域是现有设计,同 ID 会话可能同时被注销。
- 不存在的账号没有计数记录。本补丁是账户维度防护,不能替代网关 IP/速率限制;恶意者知道手机号时可以故意触发锁定,需要人工恢复。
上线
先执行 docs/sql/20261021-admin-login-guard.sql,再发布后端。缺表时登录拒绝,不降级放行。
开发核实身份及失败日志后,在数据库事务内同时清除该账号锁表记录的锁定标志/计数,以及恢复账户 status。示例 SQL 在脚本末尾(默认注释),无 HTTP 解锁接口。
验收
使用专用测试账号:错误密码4次仍未锁,第5次锁定;正确密码/短信/微信不能再登录;重启与换IP不解锁;界面启用和改密码不解除独立锁;开发 SQL 解锁后正常登录。并发失败应累计无丢失。
新增 AdminLoginGuardTest 验证锁定提交不回滚、锁定后正确凭据不能解锁、密码预检查不清零。
本地编译尝试仍遇到腾讯云依赖未缓存,尚未完成编译和自动测试,不代表测试通过;未部署或执行数据库脚本。