表单

询盘表单收到垃圾询盘:
先分清三类,再决定拦哪一类

验证码只能挡住脚本。真人发的模板、自己人点的测试,得用另外两套办法。

文 / Mark 2026-11-05 表单 / 防刷

先别急着加验证码。多数站加完,垃圾没少几条,真询盘反而少了一批。

垃圾询盘不是一个问题,是三个。三类混在一起,换什么工具都拦不准。

一、你的垃圾询盘,其实是哪三类?

把收件箱最近 30 条翻一遍,按下面的特征分堆,十分钟能分完。

1. 机器人:几秒一条,内容带链接

时间戳集中在几分钟内,邮箱像乱码,留言里塞着网址或者一串看不懂的词。这种提交不看页面,直接往接口里灌,一天能刷几百条。

它们还会填满所有字段。你加一个必填的公司名,它就填一串字母。这也是蜜罐字段能生效的原因。

2. 同行和货代:真人坐在电脑前发的

姓名像真的,邮箱是 Gmail,英文通顺,问的却是「你们做不做货代」「要不要 SEO 服务」。

人机验证对这类完全无效,因为对面本来就是人。

3. 自己人:测试、误点、重复提交

上线当天你点了三次提交,销售在客户面前演示了一遍,这些都会进收件箱。数量不多,但会让「最近垃圾变多」这个判断失真。

哪一类一眼特征怎么处理
机器人秒级连发,留言带链接边缘层丢掉,人机验证管用
同行群发模板通顺,推销自家服务关键词规则加人工拉黑,验证码不管用
自己人公司网络,内容正常加白名单,别当垃圾删

三类占比不同,做法也不同。

以同行群发为主的站,装验证码是白花钱。

二、为什么加了验证码,垃圾反而更多了?

它判的是「是不是人」,判不了「想不想卖你东西」

人机验证收集的是浏览器环境、鼠标轨迹、计算耗时这些信号。它只回答一个问题:这次提交来自人还是脚本。至于这个人为什么要提交,它不知道,也不负责。

所以机器人会少,同行不会少。你感觉「加了没用」,是因为烦你的那批本来就是人。

只放了前端组件,等于没装

这是最常见的装错。页面上加了组件,提交时不带校验,攻击者直接 POST 到接口,验证码根本不会触发。

Cloudflare 的文档把这条写成强制项,原话很直接:

“You must call the Siteverify API to complete your Turnstile implementation. The client-side widget alone does not protect your forms.”

官方原文:必须调用 Siteverify 接口才算完成接入,只有前端组件保护不了表单。同一页还写了两条:token 只在 300 秒内有效,且只能用一次,重复提交会返回 timeout-or-duplicate。

Cloudflare Docs · Validate the token

拦在表单里,不如拦在边缘

请求已经进了函数,函数再拒,收件箱是干净的,但调用配额和日志已经被占掉。放在边缘拦,请求根本到不了你的代码。

顺序应该是先边缘、后表单。这个顺序反过来,成本差好几倍。

三、四层拦法,从零成本往上加

成本从低到高,四层。

第一层:蜜罐字段,今天就能加

表单里放一个正常用户看不见的输入框,名字别写 honeypot,写 website 或者 company_url。用 CSS 把它移出屏幕,不要用 display:none,一部分脚本会跳过隐藏元素。

提交时这个字段有值,直接丢掉。成本是两行 HTML,误伤率接近零。

第二层:同一 IP 的提交频率

判据很简单:正常客户一天最多提交两三次。同一个 IP 在 10 秒里超过 3 次,基本可以确定不是人。

这一层放在边缘,规则写成「路径等于表单接口、按 IP 计数、超出就拦 10 秒」,够挡掉绝大多数脚本。

第三层:Turnstile,免费额度够小站用

免费版的配额是:最多 20 个组件,每个组件 10 个域名,挑战次数不限,数据回看 7 天。对外贸站来说,这个量级几年都用不完。

三种模式里选 Managed 就行。风险低的人直接过,风险高的才弹一个复选框。文档里还有一句值得注意的话:

“Turnstile does not access, store, or transmit user communications, form entries, or other page inputs.”

官方原文:它不读取、不存储、不传输表单内容。客户填的公司名、采购量、图纸,都不经过它。对要过客户合规审查的外贸站,这句话比多拦几条垃圾有用。

Cloudflare Docs · Turnstile Overview

第四层:内容规则,只当兜底

留言里出现 3 个以上链接、出现货代或 SEO 这类推销词、姓名和邮箱明显对不上,标成待审。

标记,不要直接删。删掉的东西没人复查,误删一单就是几千美金。

这一层拦得住什么漏掉什么 / 会误伤谁
蜜罐字段无脑填表的脚本漏专门针对你写的脚本,误伤浏览器自动填充插件
IP 频率单点猛刷漏分布式慢刷,误伤共用出口的公司网络
Turnstile大部分自动化工具漏真人发的模板,误伤老浏览器和禁用 JS
内容规则已知话术漏新话术,误伤小语种的正常询盘

四、免费版的限速规则,够不够用?

Cloudflare 的速率规则按套餐分档,免费版给得很少:1 条规则,统计窗口 10 秒,封禁 10 秒,只能按 IP 计数。Pro 是 2 条、窗口最长 1 分钟、封禁最长 1 小时;Business 5 条;Enterprise 100 条。

这意味着免费版挡得住「一个 IP 猛刷」,挡不住「一万个 IP 各刷一次」。后者只能靠人机验证加内容规则。

说句实话:日提交不到 50 条的站,一条 10 秒规则加蜜罐就够了,不必为多几条规则升套餐。真被大规模刷的时候再升,那时你也知道该按什么维度限了。

五、误拦一个真客户,为什么比放过一百条垃圾更贵?

最容易被拦的是这几种人

公司网络共用出口 IP 的采购办,一个 IP 后面坐着几十个人;用 VPN 或代理的;浏览器版本老、JS 被禁的;用网页翻译打开你站的。这几种人在中东、非洲、东南亚客户里占比不低。

三个信号,说明你拦错人了

  1. 询盘总量掉了一半,垃圾只掉了三成。
  2. 老客户来信问「你们网站的表单是不是坏了」。
  3. 某个国家的提交归零,而那里原本是你的主力市场。

出现任何一条,先把规则调松,观察 2 周再收紧。规则卡得太死,先丢的是订单,不是垃圾。

留一条人工通道

表单下面放一行邮箱和 WhatsApp。真客户被拦,还有第二条路。这一行字几乎不占地方,但它是误拦的最后一道保险。

六、上线顺序:五步,别一次全开

一次全开,出了问题分不清是哪一层的锅。

  1. 先记 7 天原始提交。时间、IP、UA、留言全文,存到你自己的表里。没有基线,后面所有判断都是感觉。
  2. 加蜜罐。只加这一层,观察 3 天,看垃圾掉了多少。
  3. 加一条 IP 频率规则。阈值先放宽,10 秒 5 次;跑满 2 周确认没误伤,再收到 3 次。
  4. 加 Turnstile,并且接上服务端校验。前端组件加完不算完,接口必须验。
  5. 观察 2 周再动内容规则。前四层已经跑顺的站,第五步常常可以不做。

服务端校验就是一次 POST,命令行就能验:

curl -X POST 'https://challenges.cloudflare.com/turnstile/v0/siteverify' \
  -d 'secret=你的_SECRET_KEY' \
  -d 'response=前端提交上来的_token' \
  -d 'remoteip=客户IP'

返回里 success 是 true 才放行。不是 true,看 error-codes:timeout-or-duplicate 是 token 过期或被重复使用,invalid-input-response 是伪造的。把这两个错误码分开记,能看出是客户提交太慢,还是有人在灌。

七、怎么证明拦对了?看哪三个数

上线前 2 周和上线后 2 周,各取一组:垃圾条数、真询盘条数、误拦条数。误拦这一项要人工数,从「客户来信说表单坏了」和待审队列里捞。

三个数一起看才有结论。只看垃圾降了多少,很容易把「连真客户一起拦掉」当成成果。

两周后看到说明什么下一步
垃圾降了,真询盘持平或上升拦对了层保持,只调阈值
垃圾降了,真询盘也降了拦过头放宽频率,把验证码切到 Invisible
垃圾基本没变多半没做服务端校验回到表单接口,补 Siteverify

八、这件事写进合同吗?

写。理由只有一条:垃圾询盘和误拦是同一件事的两面,谁有权限改规则,出事谁负责查。

  1. 规则谁配。边缘规则和表单校验属于交付范围,交接时要有文档,不能只存在某个人的账号里。
  2. 误拦谁查。客户报「表单打不开」,48 小时内要能说出是被哪条规则拦的。
  3. 记录谁留。被拦的提交至少留 30 天,含 IP、时间、内容摘要。
  4. 别写「保证零垃圾」。做不到的承诺写进合同,只会让双方都难看。

说句实话:我们自己的站也还在收同行群发的询盘。工具能挡掉机器和模板,挡不掉一个愿意花时间打字的人。目标是让收件箱能看,不是让收件箱空着。

常见问题

Q1加了验证码,垃圾询盘为什么没少?

因为烦你的多半是真人。人机验证只判「是不是人」,同行和货代群发的模板它一律放行。先按机器人、同行群发、自己人三类分堆,才知道该补哪一层。

Q2Turnstile 免费版有什么限制?

20 个组件、每个组件 10 个域名、挑战次数不限、数据回看 7 天。小站几年用不完。但只在页面放组件不算接入,必须服务端调 Siteverify 校验 token,否则等于没装。

Q3免费版 Cloudflare 能配几条限速规则?

1 条,统计窗口 10 秒、封禁 10 秒,只能按 IP 计数。Pro 2 条、Business 5 条。它挡得住单点猛刷,挡不住一万个 IP 各刷一次,那种要靠人机验证加内容规则。

Q4怎么判断拦过头,把真客户也拦了?

看三个信号:询盘总量掉一半而垃圾只掉三成、老客户来信问表单是不是坏了、某个主力市场提交归零。出现一条就先把规则调松,观察 2 周再收紧。

资料来源

  1. Cloudflare Docs · Turnstile Overview(三种组件模式、非交互挑战的机制、不读取表单内容的原文)
  2. Cloudflare Docs · Turnstile Plans(免费版配额:20 个组件、每组件 10 个域名、挑战不限次数、数据回看 7 天)
  3. Cloudflare Docs · Validate the token(必须服务端校验、token 300 秒有效且一次性、Siteverify 请求参数与错误码)
  4. Cloudflare Docs · Rate limiting rules(各套餐规则条数、计数周期与封禁时长上限)
继续看

拦之前先分类,拦之后看三个数。

更多文章 网站日志该向谁要 · 如何让 ChatGPT 引用你的站 · 外贸站 CDN 验收清单 · 如何把 Clarity 数据接入 AI 助手 · 如何把 GA4 数据接入 AI 助手 · 销售产品链接验收 · 外贸站页面治理清单 · 产品图一张 4MB,先换图 · 选错「搭法」比选错服务商更坑 · 国内访问慢怎么解 · 外贸线上获客预算怎么花 · 2026 年了,用 AI 重构你的站 · 外贸站该换个「地基」了 · 外贸站改版发布排期 · WordPress 迁移会丢 SEO 权重吗 · 网站结构化数据验收 · WordPress 网站太慢怎么办 · 建站服务商失联接管 · 外贸网站被黑了怎么办 · 网站缓存更新验收 · 独立站没询盘怎么办 · 外贸站修改需求写法 · 外贸建站源码交付 · 网站字体加载验收 · 外贸建站多少钱 · 外贸站内容更新排期 · WordPress 建站 vs 纯静态站 · 网站解析与邮箱安全 · WordPress 的那些坑 · 外贸站托管服务边界 · 上线后的监控清单 · GEO 时代的静态站结构 · Core Web Vitals 是订单漏斗 · 没后台的网站黑客打什么 · 迁静态站最坑的是 301 · site: 只搜到首页 · 多语言站的 hreflang · 外贸站海外打开慢的五个地方

免费

垃圾询盘比真询盘还多?
把最近一批提交发我,先按三类拆,再决定拦哪一层。

发邮件
  1. 01
    发网址,一句话说清你在担心什么企业微信或邮件都行,不用先填表、不用先注册。
  2. 02
    我按你给的地址实测一遍挑三个有询盘价值的页面,速度、抓取、表单各跑一次。
  3. 03
    当天给结论,能自己改的给清单该换的也直说,并告诉你换完能省下哪几笔。