登录请求不能只按单个 IP 限速:撞库者可能更换来源地址,正常用户也可能因公司网络或运营商网络共用出口而被误判。登录接口撞库防护的频率控制设计,应同时关注失败次数、请求速度和账号风险,并给正常访问留下恢复空间。

先确定限制对象和计数方式
至少分别统计账号、来源 IP 和短期设备标识。账号维度能发现针对单一账户的连续猜测;IP 维度能约束单一来源的高频请求;设备维度可作为辅助信号,但标识可能被清除或伪造,不适合单独作为封禁依据。多个维度并用,能减少攻击者分散请求带来的盲区。
计数应主要关注认证失败,而不是把成功登录也累加到失败阈值。密码错误、账号不存在等对外提示应保持一致,避免攻击者借响应内容判断账户是否存在。内部日志可以记录具体失败原因,供排查和调参使用。
阈值从温和限制开始
没有适用于所有系统的固定数字。作为上线前的起始配置,可考虑对单一账号在 5 至 15 分钟内累计 5 至 10 次失败后触发额外验证或短暂延迟;对单一 IP 在一分钟内达到数十次登录请求时进行限速或观察。具体范围要结合正常登录高峰、用户规模、共享网络情况和接口承载能力调整,不能把建议值直接当成安全标准。
固定窗口实现简单,但攻击者可以在窗口边界前后集中请求;滑动窗口更能贴近真实时间段。令牌桶适合控制持续请求速率,并允许短时突发。登录接口撞库防护的频率控制设计可以采用组合方案:以滑动窗口统计失败次数,以令牌桶限制请求速度,再按风险决定是否追加验证。
把限制做成渐进式措施
一旦越过阈值就长时间锁死账户,可能让他人故意触发账户锁定,反而阻止账号主人登录。优先使用逐级处置:先增加短暂等待,再要求验证码或其他验证;持续异常时限制该来源,并提供安全的密码重置与账户恢复路径。多因素认证可降低仅凭密码猜中后造成的风险,但不能替代登录速率控制。
可执行的配置步骤
- 记录一段有代表性的正常登录流量,按时间、失败比例、账号和来源地址观察高峰及共享出口特征。
- 分别设置账号、IP 的观察阈值和触发动作,先启用记录或延迟,再逐步启用更强限制。
- 为重复失败设置递增等待,并确保等待时间有上限;避免永久锁定,也不要只依赖客户端计时。
- 检查反向代理后的真实来源地址配置,只有可信代理提供的转发信息才用于识别客户端 IP。
- 上线后监控误拦截、失败登录、验证通过率和恢复请求;出现正常用户受影响时,调整阈值或增加恢复渠道。
用测试验证防护效果
测试时覆盖单账号多次失败、单一来源快速尝试、多个来源针对同一账号,以及大量正常用户共享一个出口等情况。还要验证成功登录是否清除或衰减失败计数、不同应用节点之间是否共享必要的限速状态,以及服务重启后策略是否按预期恢复。监控指标应避免记录明文密码、验证码或不必要的敏感信息。
好的登录接口撞库防护的频率控制设计并非一味压低阈值,而是让异常请求更难持续,让正常用户能完成验证或恢复访问。结合分层计数、渐进处置和持续调参,才能在防护与可用性之间取得平衡。
常见问题
只限制 IP 地址够吗?
不够。攻击请求可能来自多个地址,而共享网络中的许多正常用户也可能共用一个出口。应结合账号维度判断。
达到失败阈值后要锁多久?
没有通用时长。可从短暂延迟或短期限制开始,根据风险和用户恢复流程调整,避免长时间、不可恢复的锁定。
验证码能替代频率限制吗?
不能。验证码可以提高自动化尝试成本,但仍需限制请求速率,并为无法完成验证的正常用户提供可用的恢复方式。


