日志里同一地址每分钟提交几十次登录请求,账号被锁定多次。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,登录接口没有频率限制,失败次数也没有累计策略。
碰到「登录暴力破解」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /login { limit_req zone=login burst=3 nodelay; }
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,按地址与账号双维度限流;失败多次后增加等待;把来源加入临时黑名单。
最后用这个标准收尾,爆破请求被拦截并限速,正常用户登录流程和响应速度不受影响。