onsubmit="return false"无法防爬虫,因爬虫不执行JS而直接发请求;改type="button"仅切断默认提交链路,需配合JS主动提交及后端校验;honeypot字段与服务端生成的时间戳可识别非人工操作;所有前端校验必须服务端复核。

onsubmit="return false" 不能防爬虫
直接在 form 上写 onsubmit="return false" 只能拦住普通用户点击,对爬虫完全无效——它根本不会执行 JS,而是直接构造 HTTP 请求发到后端。这种写法连基础防护都算不上,纯属自欺欺人。
type="button" 替代 type="submit" 是基础但关键的一步
把提交按钮从 type="submit" 改成 type="button",能切断浏览器默认提交链路,让爬虫无法靠模拟点击触发原生表单提交。但这只是起点,不是终点:
- 必须配合 JS 主动收集数据并调用
fetch或XMLHttpRequest,否则按钮彻底失能 - 不能只改按钮类型就完事,后端仍需校验请求来源、参数完整性、签名等
- 如果页面同时存在
type="submit"按钮(比如备用逻辑),爬虫仍可能瞄准它
隐藏 honeypot 字段 + 时间戳验证是低成本有效手段
在表单里加一个肉眼不可见但 JS 能读写的字段,比如:
<input type="text" name="honey" style="display:none;">
后端收到请求时检查该字段是否为空且未被修改。非人工操作大概率会把它一起提交(甚至填值),从而暴露身份。再叠加时间戳验证:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
立即学习“前端免费学习笔记(深入)”;
- 页面加载时写入
<input type="hidden" name="ts" value="1721173020"> - 后端比对当前时间与该值,偏差超过 30 秒即拒绝
- 注意:时间戳必须服务端生成或加密签名,不能仅靠客户端 JS 生成
JS 初始化校验失败时禁用按钮,但不依赖 disabled 属性本身
很多开发者以为给按钮加 disabled 就安全了,其实不然:
- 爬虫可跳过 JS 直接发 POST,
disabled对它毫无约束力 - 真正起作用的是 JS 在初始化阶段动态注入校验逻辑,比如设置
window.__token = 'xxx',然后在提交前校验该变量是否存在、是否过期 - 按钮禁用只是辅助体验,核心防线必须落在后端——包括签名验证、IP 频控、行为指纹等
最易被忽略的一点:所有前端校验逻辑(包括时间戳、honeypot、token 注入)都必须有对应的服务端复核,否则等于没做。


















