前端登录表单加了输入限制,为什么还是被暴力破解尝试?

诸葛艳君 阅读 73

我给登录表单加了最小输入长度和错误次数限制,但监控显示攻击者还是能频繁尝试。代码这样写的:



  
  


  let failedAttempts = 0;
  document.getElementById('loginForm').onsubmit = (e) => {
    if (++failedAttempts > 3) e.preventDefault();
  }

发现攻击者用自动化工具每秒能提交多次,明明设置了minlength和客户端计数器,为什么还是被绕过?是不是应该加验证码?或者需要后端配合设置请求频率限制?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
毓珂
毓珂 Lv1
你这段代码只能防君子,不能防小人。

攻击者根本不会等你这个客户端计数器生效,他们压根不会加载页面,更不会等JS执行。直接复制你登录接口地址,用curl或者自动化工具直接发POST请求,你的表单验证和JS限制根本就不起作用。

要真防暴力破解,后端必须做三件事:

1. 接口频率限制(比如每分钟最多5次请求)
// Node.js示例
const rateLimit = require('express-rate-limit');
const loginLimiter = rateLimit({
windowMs: 60 * 1000,
max: 5,
message: '请求太频繁,请1分钟后重试'
});
app.post('/login', loginLimiter, handleLogin);


2. 密码复杂度验证(前后端都要验证)
// 后端校验示例
function isValidPassword(password) {
return password.length >= 8 &&
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/d/.test(password);
}


3. 账号锁定机制(比如连续输错5次锁15分钟)
-- 建议的用户表结构字段
ALTER TABLE users
ADD failed_attempts INT DEFAULT 0,
ADD locked_until TIMESTAMP NULL DEFAULT NULL;


验证码建议用滑块验证或者行为验证码,单纯文字验证码现在基本等于没加。现在的攻击工具都有OCR识别能力,普通验证码分分钟破解。

你现在的代码能防住普通用户误操作,但对自动化攻击基本没用。复制过去试试吧,看你监控还能不能看到高频攻击记录。
点赞 6
2026-02-03 13:01
芹芹酱~
问题在于你只做了前端限制,攻击者直接绕过前端提交请求就行。光靠前端防不住自动化工具,后端必须加请求频率限制和验证码校验。建议用 express-rate-limit(如果你用Node.js)来限制IP请求频率,同时在表单里加上动态验证码。

// 后端示例代码(Node.js + Express)
const rateLimit = require("express-rate-limit");
app.enable('trust proxy');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: 100 // 每个IP最多100次
});
app.post('/login', limiter, (req, res) => {
// 验证码校验逻辑...
});

// 前端验证码生成略...


别指望前端能挡住恶意攻击,后端防护才是关键。
点赞 6
2026-02-01 08:08