这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
防暴力破解与登录限流
攻击者会怎么打登录接口
账号密码登录接口是全系统最高危的入口。常见的攻击方式有三类:
| 攻击 | 做法 | 危害 |
|---|---|---|
| 爆破 | 对单个账号穷举密码 | 密码弱就可能被攻破 |
| 撞库 | 用别的网站泄露的「账号+密码」批量尝试 | 用户喜欢重复用密码,命中率高 |
| 代理池 | 用海量 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 后面的正常用户?
- 失败日志是否进入风控和审计系统?
登录这扇门守住了,账号安全才有基础。下一节处理注册和找回密码这两个同样容易被利用的入口。
发现内容有问题?
告诉我们哪里需要改进。
