没有人喜欢 CAPTCHA。眯着眼睛辨认红绿灯和消防栓来证明自己是人类,是对每一位诚实访客征收的一种税,而那些谜题回传给广告网络的数据本身又是另一桩隐患。Cloudflare Turnstile 用一种智能、基本不可见的检查取代了这一切,它在不需要谜题、不追踪访客、也不花你一分钱的情况下,确认访客是人类。在 2026 年,这是保护表单免受机器人侵扰最干净利落的方式。

本指南将讲解 Turnstile 是什么、为什么它在大多数网站上胜过 reCAPTCHA,以及如何将它准确地添加到任意表单中,包括许多教程都跳过的至关重要的服务端验证步骤。

摘要

  • Turnstile 是 Cloudflare 推出的免费、注重隐私的 CAPTCHA 替代方案,没有可视谜题
  • 免费且额度慷慨,可在任意网站上运行,而不仅限于已经接入 Cloudflare 的站点
  • 设置分为两部分:表单上的小组件,以及一个你绝不能跳过的服务端验证调用
  • 它提供 managed、non-interactive 和 invisible 三种小组件模式,以适配不同表单
  • 它是联系表单、注册、登录和评论框中 reCAPTCHA 的即插即用替代方案

什么是 Cloudflare Turnstile

Cloudflare Turnstile 是一种 CAPTCHA 替代方案,它通过在后台运行的一系列轻量、不打扰的浏览器质询来验证访客是否为人类。它不要求用户解谜,而是分析来自浏览器的信号,在大多数情况下静默地确认访客。当确实需要交互时,通常只是一个复选框,绝不会是图片网格。

至关重要的是,Turnstile 的设计理念是尊重隐私。它不会为出售广告而对用户进行画像,也不依赖于在整个网络中追踪某个人。你在获得机器人防护的同时,不必把访客变成一种数据产品,这对注重 GDPR 的网站而言越来越重要。

它还可在任意站点上运行。使用 Turnstile 无需将你的域名通过 Cloudflare 代理;小组件和验证 API 可从任何地方工作。

为什么要替换 reCAPTCHA

切换的理由很直接:

  • 更好的用户体验。 合法访客无需解谜,这意味着更少的表单被中途放弃。
  • 隐私。 与占主导地位的替代方案不同,Turnstile 的设计目标是不为广告而追踪用户。
  • 免费且慷慨。 Turnstile 可免费使用,其额度对绝大多数网站而言都足够高。
  • 随处可用。 它不要求你的 DNS 必须在 Cloudflare 上。
  • 集成简单。 一个脚本标签、一个小组件,再加一次服务端检查。

对于大多数联系表单、注册和评论系统而言,几乎没有理由继续承担传统 CAPTCHA 在可用性上的代价。

第 1 步:创建 Turnstile 小组件

在 Cloudflare 控制台中打开 Turnstile 并添加一个新站点。你需要提供一个名称以及小组件将运行的主机名。Cloudflare 会给你两把密钥:

  • 一把放入 HTML 的 site key(公开)
  • 一把留在服务器上、用于验证的 secret key(私有)

你还需选择一种小组件模式:

模式行为
ManagedCloudflare 根据风险决定是否显示复选框(推荐的默认值)
Non-interactive静默运行,无复选框
Invisible完全隐藏;全部在后台运行

managed 模式是大多数表单合理的起点。

第 2 步:将小组件添加到你的表单

引入 Turnstile 脚本,并把小组件元素放入你的表单。将 YOUR_SITE_KEY 替换为控制台中的 site key:

 1<form action="/submit" method="POST">
 2  <input type="email" name="email" required />
 3
 4  <!-- Turnstile widget -->
 5  <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
 6
 7  <button type="submit">Send</button>
 8</form>
 9
10<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

当小组件运行时,它会在你的表单中添加一个名为 cf-turnstile-response 的隐藏字段,其中包含一个一次性令牌。这个令牌正是你的服务器在下一步要验证的内容。

第 3 步:在服务器上验证(不要跳过这一步)

这一步才真正提供保护,也是教程最常省略的一步。仅凭小组件什么也证明不了;攻击者可以直接提交你的表单。在信任这次提交之前,你必须从表单中取出令牌,并在服务端针对 Cloudflare 的 siteverify 端点进行校验。

将令牌和你的 secret key 发送到 https://challenges.cloudflare.com/turnstile/v0/siteverify

 1// Example: Cloudflare Worker or any server-side handler
 2async function verifyTurnstile(token, ip, secret) {
 3  const formData = new FormData();
 4  formData.append("secret", secret);
 5  formData.append("response", token);
 6  if (ip) formData.append("remoteip", ip);
 7
 8  const result = await fetch(
 9    "https://challenges.cloudflare.com/turnstile/v0/siteverify",
10    { method: "POST", body: formData }
11  );
12
13  const outcome = await result.json();
14  return outcome.success === true;
15}

只有当 outcome.successtrue 时,才继续执行表单操作(发送邮件、创建账户、发布评论)。如果为 false,则拒绝该提交。切勿在客户端代码中暴露你的 secret key。

一个便于开发的细节:Cloudflare 提供了测试密钥 ,它们始终通过、始终拦截,或始终强制一次交互式质询,因此你可以在上线前测试每一条路径。

Cloudflare Turnstile 的常见用例

凡是机器人可能滥用的地方,Turnstile 都能契合:

  • 联系表单,用于阻止垃圾提交
  • 注册与登记,用于阻止创建虚假账户(它与 Cloudflare Pages 用户系统 搭配得很好)
  • 登录表单,用于减缓撞库攻击
  • 评论框,在不打扰真实读者的前提下减少垃圾信息
  • 订阅注册,用于保持名单干净

如果你想在整个网站上正确地设置机器人防护,包括把服务端验证做到位,那是我在网站安全服务 中涵盖的一部分内容。

关键要点

  • Turnstile 是一种免费、注重隐私的 CAPTCHA 替代方案,没有可视谜题
  • 它可在任意网站上运行,而不只是 DNS 在 Cloudflare 上的站点
  • 集成包括表单上的一个小组件,外加一次必不可少的服务端验证调用
  • managed 模式是最佳默认值;non-interactive 和 invisible 模式则用于特定需求
  • 始终在服务端验证令牌;仅凭小组件无法提供真正的防护
  • 它是表单、注册、登录和评论中 reCAPTCHA 干净利落的即插即用替代方案

常见问题

Cloudflare Turnstile 是免费的吗? 是的。Turnstile 可免费使用,其额度对绝大多数网站而言都足够慷慨。标准的小组件和验证流程不收取任何费用。

使用 Turnstile 需要把我的网站放在 Cloudflare 上吗? 不需要。无论你的 DNS 或托管位于何处,Turnstile 都能在任意网站上运行。你只需一个 Cloudflare 账户来创建小组件并获取 site key 和 secret key。

Turnstile 是 reCAPTCHA 的好替代品吗? 对大多数网站而言,是的。它提供无谜题的更佳用户体验,其设计目标是尊重隐私而非为广告追踪用户,并且免费。它覆盖相同的用例:联系表单、注册、登录和评论。

我必须在服务器上验证令牌吗? 是的,始终如此。仅有客户端小组件并不能保护你,因为机器人可以直接提交表单。你必须将令牌连同你的 secret key 一起发送到 Cloudflare 的 siteverify 端点,并且只信任返回 success 的提交。

Turnstile 提供哪些小组件模式? 三种:managed(Cloudflare 根据风险决定是否显示复选框)、non-interactive(静默,无复选框)和 invisible(完全隐藏)。managed 模式是大多数表单推荐的默认值。

我可以在上线前测试 Turnstile 吗? 可以。Cloudflare 提供测试密钥,它们始终通过、始终拦截,或始终强制一次交互式质询,因此你可以在部署真实密钥之前,于开发阶段验证每一条结果路径。