在登录页拿到的验证码,填到重置密码接口里也能通过,两个接口共用同一个缓存键,安全测试用这一步直接改了别人的密码。日志里能对上时间点,这种反而好排。
验证码只按手机号存键,没带业务场景前缀,登录和重置密码读写的是同一份数据。校验函数也不关心请求来自哪个接口。这一点先确认清楚,后面就不用反复试。
SETEX sms:reset:13800138000 300 913572 GET sms:login:13800138000
围绕「验证码场景绑定」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:键名里加场景前缀,登录和重置密码各存一份;校验时同时比对场景,不匹配直接失败;用登录码调重置接口,确认返回验证码无效。
结果对不对很好判断,登录验证码在重置密码接口被拒,反过来也一样。
