暴力破解和撞库有什么区别?登录接口如何防护?
简化版
暴力破解是不断猜同一账号或密码,撞库是使用泄露的账号密码组合批量尝试登录。登录接口防护要分层:限流、失败次数控制、验证码或 MFA、密码策略、异常设备/IP 风控、泄露密码检测、日志审计和告警。
详细版
暴力破解通常表现为单账号多密码或单密码扫多账号;撞库依赖其他网站泄露的真实凭证,成功率往往更高。防护不能只靠验证码,因为验证码会影响体验且可被绕过。
生产中常按账号、IP、设备、网段、ASN、接口维度限流;连续失败后逐步增加等待时间;高风险登录触发 MFA;对成功但异常的登录也要告警。密码存储必须使用 bcrypt、Argon2 等慢哈希,避免数据库泄露后被离线快速破解。
完整版教学
一、暴力破解和撞库的区别
暴力破解是“猜”,撞库是“拿泄露数据试”。前者可能对一个账号尝试 10000 个密码,后者可能拿 100 万组邮箱密码组合批量登录。
暴力破解: alice + password1/password2/password3...
撞库: leaked_email + leaked_password
撞库更贴近真实攻击,因为很多用户会在多个网站复用密码。攻击者不需要猜,只要批量验证。
记忆钩子:暴力破解是攻击者替用户猜密码,撞库是攻击者拿别处泄露的密码来验证你这里能不能登录。
二、为什么只按 IP 限流不够
攻击者可以使用代理池,让每个 IP 请求很少。如果只按 IP 限流,就会漏掉分布式撞库。反过来,如果只按账号限流,攻击者可以扫大量账号。
| 限流维度 | 能挡住 | 挡不住 |
|---|---|---|
| IP | 单 IP 爆破 | 代理池 |
| 账号 | 单账号爆破 | 大量账号扫描 |
| 设备指纹 | 同设备攻击 | 指纹伪造 |
| 网段/ASN | 大规模来源 | 误伤风险 |
登录安全要组合多个维度,并按风险动态调整。
三、失败次数和退避策略
连续失败后可以逐步增加等待时间,而不是立刻永久锁号。永久锁号容易被攻击者用来拒绝服务:故意输错别人的密码,让别人无法登录。
失败 1-3 次: 正常提示
失败 4-6 次: 需要验证码
失败 7+ 次: 延迟 5/30/300 秒
高风险: MFA 或人工验证
数字只是示例,真实阈值要根据业务量和误伤率调优。
四、验证码和 MFA 的位置
验证码适合在人机风险较高时出现,不适合每次登录都强制。MFA 适合账号风险高、设备陌生、地区异常、密码刚修改后等场景。
低风险: 密码登录
中风险: 验证码
高风险: MFA / 邮件确认 / 短信确认
安全策略要兼顾攻击成本和用户体验。把所有人都拦得很重,用户会流失;完全不拦,攻击成本太低。
五、密码存储和离线破解
登录接口防爆破是在线防护,密码哈希是数据库泄露后的离线防护。密码不能用普通 MD5/SHA1,要用带盐的慢哈希,如 bcrypt、scrypt、Argon2。
fast hash: 1,000,000,000 guesses/sec
slow hash: much fewer guesses/sec
慢哈希的目标是提高每次猜密码成本。即使攻击者拿到哈希,也不能高速撞出大量弱密码。
六、监控和响应
登录安全必须有可观测性。要记录失败次数、来源 IP、设备、User-Agent、账号、地区变化、成功后的敏感操作等。发现撞库时,可能需要临时提高风控、强制重置高风险账号密码、通知用户。
many accounts + same password pattern -> spraying
one account + many passwords -> brute force
many leaked pairs + distributed IPs -> credential stuffing
没有日志和指标,只靠用户反馈,往往已经晚了。
七、提示文案和枚举风险
登录失败提示也会影响安全。如果提示“用户不存在”和“密码错误”区分过细,攻击者可以先枚举有效账号。更稳妥的是对外返回统一提示,对内日志记录真实原因。
user-facing: 账号或密码错误
server log: user_not_found / wrong_password / locked / mfa_required
注册、找回密码、短信验证码接口也要防枚举。安全文案要让正常用户能理解,又不能给攻击者提供过多信号。
八、和业务风控结合
登录安全不是孤立接口。一次登录成功后,如果马上修改邮箱、提现、导出数据,也可能是账号接管行为。高风险操作应结合登录时间、设备、IP、地理位置和历史行为判断。
new device + foreign IP + password changed + withdraw
=> step-up authentication
这类策略比单纯“密码正确就放行”更适合真实业务系统。
九、常见误区与追问
- 误区:验证码能解决所有爆破。 验证码可被打码平台、自动化和低频分布式攻击绕过。
- 误区:锁账号越快越安全。 攻击者可利用锁号制造拒绝服务。
- 误区:只按 IP 限流就够。 代理池和分布式撞库会绕过单一 IP 维度。
- 追问:撞库和密码喷洒有什么区别? 撞库用泄露组合,密码喷洒用少量常见密码扫大量账号。
- 追问:为什么需要 MFA? 密码泄露时仍需要第二因素降低接管风险。
- 追问:如何降低误伤? 多维度评分、渐进式挑战、白名单和人工申诉。
- 追问:数据库泄露后如何补救? 强制重置高风险密码、撤销会话、通知用户、分析访问日志。
十、加强记忆
登录接口防护要按“在线攻击 + 离线泄露”两条线记。在线侧用多维限流、退避、验证码、MFA 和风控识别爆破与撞库;离线侧用慢哈希和盐保护密码库。不要迷信单点措施,真正有效的是让攻击者每一步成本都上升,同时让正常用户尽量少受影响。