防暴力破解与登录限流

攻击者会怎么打登录接口

账号密码登录接口是全系统最高危的入口。常见的攻击方式有三类:

攻击做法危害
爆破对单个账号穷举密码密码弱就可能被攻破
撞库用别的网站泄露的「账号+密码」批量尝试用户喜欢重复用密码,命中率高
代理池用海量 IP / 设备分散请求绕开「按 IP 限流」

注意撞库的可怕之处:攻击者用的不是你的数据库,而是全网泄露的密码字典。你的限流做得好,可能只是「慢一点」,而不是「拦得住」。

为什么「只按 IP 限流」不够

最常见的错误是:同一个 IP 连续失败 N 次就锁。

攻击者可以用代理池一秒换一个 IP,单 IP 的失败次数永远达不到阈值;而正常用户如果在公司 NAT 后面,所有同事共用一个出口 IP,一人手滑输错几次密码,可能把整栋楼都锁掉。

所以限流维度必须组合,不能单点:

  • 账号维度:同一账号连续失败后冷却/锁定期。
  • IP 维度:同一 IP 大量失败时触发验证码或临时限制。
  • 设备维度:同一设备指纹异常时提高风险。
  • 行为特征:请求频率、间隔、登录时段是否异常。

限流策略怎么设计

一个可落地的策略长这样:

登录限流决策

收到登录请求

账号失败次数是否超限?

步骤 1 · 判断连续 5 次失败 -> 该账号冷却 15 分钟

IP 失败次数是否超限?

步骤 2 · 判断1 小时 50 次 -> 触发验证码

是否高风险(代理 / 异地 / 异常行为)?

步骤 3 · 判断是 -> 升级验证或二次验证

放行本次登录

步骤 4 · 结果失败仍累计,成功后清零
全程写入审计日志

锁定的度

锁定太狠会伤到正常用户,太松又拦不住攻击。几个常见做法:

  • 指数退避:失败次数越多,冷却越久,而不是一刀切锁死。
  • 验证码升级:达到一定阈值后,先要求验证码而不是直接封禁,避免误伤。
  • 账号 + IP 双维度解绑:真正的撞库是「账号各不相同、IP 各不相同」,要靠风控模型识别模式,而不是单看某个维度。
  • 成功后清零:正常用户输对密码后,累计的失败计数要重置,避免下次误锁。

与风控系统的关系

登录限流是「第一道闸」,后面还有更完整的风险引擎(第 7、8 章会展开)。两者的边界是:

  • 限流:规则明确、实时性强,负责挡住明显的爆破和撞库。
  • 风控:特征更多、判断更智能,负责识别「看起来正常但其实可疑」的登录。

上线检查清单

  • 登录失败是否同时按账号、IP、设备维度统计?
  • 是否使用指数退避 / 验证码升级,而不是一刀切锁死?
  • 是否处理了代理池场景(不能只靠 IP)?
  • 是否避免误伤 NAT 后面的正常用户?
  • 失败日志是否进入风控和审计系统?

登录这扇门守住了,账号安全才有基础。下一节处理注册和找回密码这两个同样容易被利用的入口。

发现内容有问题?

告诉我们哪里需要改进。