博客
联系表单的 reCAPTCHA 替代方案(不需要 Google)
· 1 分钟阅读
搜索"阻止联系表单垃圾信息",Google reCAPTCHA 是所有人第一个想到的方案--它免费、是一个开箱即用的组件,而"我不是机器人"复选框足够常见,以至于没人会质疑它。不过,合理的默认选项偶尔也值得重新审视,reCAPTCHA 正是一个好例子:它并非唯一的选择,对很多网站来说也并非正确的选择。
值得重新考虑它的真正原因
reCAPTCHA 是一个 Google 提供的第三方脚本,这带来了不止"能用"这一层面的影响:
- 隐私与同意。 reCAPTCHA 会设置 cookie,并将访客数据发送给 Google 用于其风险评分。对欧盟访客来说,这引发了真实的 GDPR 同意问题--联系表单本应是低摩擦的交互,不应该仅仅为了加载一个垃圾邮件过滤器就需要弹出 cookie 横幅。
- 又一个阻塞渲染的脚本。 对于一个唯一任务就是快速加载并让人输入消息的页面来说,这是关键路径上又多出的一个外部请求。
- 给真实用户带来摩擦。 使用 VPN、隐私浏览器或开启了跟踪保护的用户,大概都不止一次遇到过"选出所有红绿灯"的验证挑战。那是一个差点放弃的真实访客。
- 不愿再给 Google 一个接入你网站的入口。 很多开发者单纯不希望每个访客的浏览器在发送消息之前都要先和 Google 通信--即使抛开隐私细节不谈,这本身也是一个站得住脚的立场。
替代方案一:隐形 honeypot 字段
一个真实访客永远看不到也永远不会填写的隐藏输入框,但不够聪明的机器人会尽职尽责地填写它,因为它就明摆在标记里。如果它提交时非空,这条提交就是垃圾信息--丢弃它,不向任何人展示验证挑战。零第三方脚本,零摩擦,而且它能悄悄拦下绝大多数表单垃圾信息,因为这些垃圾信息大多来自愚蠢的爬虫,而不是什么高明的手段。(完整的实现细节,包括具体标记和无障碍方面的注意事项,见我们关于垃圾信息防护的深度文章。)
替代方案二:速率限制
当机器人每分钟发送数百次看起来合法的 POST 数据时,honeypot 帮不上忙--但接收端点处按 IP 和按表单的限制可以。真实访客绝不会在一分钟内提交同一个联系表单十次,所以限流不会损失任何有价值的东西,而且它不需要任何组件、任何 cookie,也不需要填表人做出任何决定。
替代方案三:Cloudflare Turnstile,当你确实需要一次验证挑战时
有时表单会吸引更聪明的机器人--能够渲染 CSS 并完全绕过 honeypot 的无头浏览器--这时一次验证挑战带来的小幅转化损失就值得付出了。Cloudflare Turnstile 是这种做法中尊重隐私的版本:它通过浏览器信号而非跟踪 cookie 来验证访客,通常在用户无感知的情况下完成,也完全不会让交互经过 Google。它做的是和 reCAPTCHA 一样的工作,只是没有那些让人反感的部分。
分层使用--并对局限性保持诚实
这里没有任何一种方法是万无一失的,Turnstile 也不例外。对任何表单来说,现实的答案都是一样的:先上 honeypot,下面配合速率限制,只有当前两者不再够用时才加上验证挑战--这正是我们在垃圾信息防护指南中更深入探讨的姿态。这种思路真正改变的只是默认选项:不要一开始就用 Google 的脚本。
这也是 Formhook 默认采用、自动应用的姿态。每个表单默认都开启了 honeypot 字段以及按 IP/按表单的速率限制,在所有套餐(包括免费版)中都是如此--无需配置,无需安装组件。对于需要额外防护层的表单,Turnstile 是表单设置里一个可选的复选框。各档位包含的内容见定价页面。
一行代码上线可用的表单
欧盟托管,提交记录永久保存,所有套餐均支持推送通知。
免费开始无需信用卡 · 阅读文档