通过多层防护机制,大幅增加撞库攻击的成本
限制同一 IP 的登录尝试次数,超过阈值后临时封禁
连续失败 5 次后将被临时封禁 60 秒
// 限流实现
const ipAttempts = {}
app.post('/login', (req, res) => {
const ip = req.ip
if (ipAttempts[ip] > 5) {
return res.status(429).json({ error: '请求过于频繁' })
}
ipAttempts[ip]++
// ... 验证逻辑
})
要求用户完成验证码,阻止自动化攻击
即使密码被撞库成功,没有第二因素也无法登录
| 检测项 | 异常特征 | 响应 |
|---|---|---|
| 登录频率 | 短时间大量尝试 | 限流/封禁 |
| 地理位置 | 异地登录 | 二次验证 |
| 设备指纹 | 新设备 | 邮件确认 |
| 行为分析 | 机器人特征 | 验证码 |
| 措施 | 效果 | 实现难度 |
|---|---|---|
| 登录限流 | ⭐⭐⭐ | 简单 |
| 验证码 | ⭐⭐⭐⭐ | 简单 |
| MFA | ⭐⭐⭐⭐⭐ | 中等 |
| 异常检测 | ⭐⭐⭐⭐ | 复杂 |
| 密码泄露检测 | ⭐⭐⭐ | 中等 |