我给登录表单加了最小输入长度和错误次数限制,但监控显示攻击者还是能频繁尝试。代码这样写的:
let failedAttempts = 0;
document.getElementById('loginForm').onsubmit = (e) => {
if (++failedAttempts > 3) e.preventDefault();
}
发现攻击者用自动化工具每秒能提交多次,明明设置了minlength和客户端计数器,为什么还是被绕过?是不是应该加验证码?或者需要后端配合设置请求频率限制?
攻击者根本不会等你这个客户端计数器生效,他们压根不会加载页面,更不会等JS执行。直接复制你登录接口地址,用curl或者自动化工具直接发POST请求,你的表单验证和JS限制根本就不起作用。
要真防暴力破解,后端必须做三件事:
1. 接口频率限制(比如每分钟最多5次请求)
2. 密码复杂度验证(前后端都要验证)
3. 账号锁定机制(比如连续输错5次锁15分钟)
验证码建议用滑块验证或者行为验证码,单纯文字验证码现在基本等于没加。现在的攻击工具都有OCR识别能力,普通验证码分分钟破解。
你现在的代码能防住普通用户误操作,但对自动化攻击基本没用。复制过去试试吧,看你监控还能不能看到高频攻击记录。
express-rate-limit(如果你用Node.js)来限制IP请求频率,同时在表单里加上动态验证码。别指望前端能挡住恶意攻击,后端防护才是关键。