Turnstile 可以保护您的网站表单免受 bot 的侵害。它分两步运行:在访问者浏览器中运行质询以产生令牌 (token) 的 JavaScript 小组件,以及您的服务器向 Cloudflare 发送该令牌以确认其有效性的后端接口。本指南介绍了如何设置这两个步骤。
在开始之前,您必须具备:
- 一个 Cloudflare 账户
- 一个需要保护的网站或 Web 应用程序
- HTML 以及您首选的服务器端语言的基础知识
Turnstile 小组件是嵌入在您网页上的 Turnstile 实例。每个小组件都有一个 sitekey(放置在 HTML 中的公开标识符)和一个 密匙 (secret key)(服务器用来验证令牌的私有凭证)。
每个小组件都有自己唯一的 sitekey 和 secret key 对,以及配置选项。
| 组件 | 描述 |
|---|---|
| Sitekey | 用于在您的网站上调用 Turnstile 小组件的公钥。 |
| Secret key | 用于服务器端令牌验证的私钥。 |
| 配置 | 模式、主机名、外观设置和其他选项。 |
实施 Turnstile 包含两个协同工作的基本部分:
-
客户端:嵌入小组件
将 Turnstile 小组件添加到您的网页表单和应用程序中,以向访问者发起质询并生成令牌。令牌是访问者完成质询时生成的一个字符串(最多 2,048 个字符)。
-
服务器端:验证令牌
将令牌发送到 Cloudflare 的 Siteverify API(验证 Turnstile 令牌的端点),以确认它们是真实且未被篡改的。
Turnstile 被设计为一项独立的服务。您可以在任何网站上使用 Turnstile,无论该网站是否通过 Cloudflare 网络进行代理。这允许跨多云环境、本地部署基础设施或使用其他 CDN 的站点进行灵活部署。客户端小组件和服务器端验证步骤完全是自包含的。
有关如何在网站上实施 Turnstile 的指导,请参阅下面的实施。
按照以下步骤实施 Turnstile。
首先,您必须创建一个 Turnstile 小组件以获取您的 sitekey 和密匙。
选择您首选的实施方法:
Cloudflare 仪表板
API
Terraform
将 Turnstile 小组件添加到您的网页表单和应用程序中。
请参阅嵌入小组件以详细了解隐式和显式渲染方法。
实施服务器端验证以验证由您的小组件生成的令牌。
请参阅验证令牌以通过正确的令牌验证来保障您的实施安全。
对于移动端应用程序和 WebView 实施,需要进行特殊的考虑。
有关移动端应用程序集成的更多信息,请参阅移动端实施。
如果您目前正在使用 reCAPTCHA、hCaptcha 或其他 CAPTCHA 服务,Turnstile 可以进行直接替换。您可以直接在目前部署了现有脚本的位置复制并粘贴我们的脚本。
请参阅迁移以获取从其他 CAPTCHA 服务逐步迁移的指南。
-
必须进行服务器端验证。使用 Siteverify API 强制执行 Turnstile 令牌至关重要。Turnstile 令牌可能是无效的、已过期的或已被兑换的。如果不验证令牌,将在您的实现中留下重大安全漏洞。您必须调用 Siteverify 来完成您的 Turnstile 配置。否则,配置将是不完整的,并且在 Turnstile Analytics 中查看您的指标时,令牌验证结果将显示为零。
-
令牌在 300 秒(5 分钟)后过期。每个令牌只能验证一次。过期或已使用的令牌必须替换为新的质询。
- 保护您的密匙。切勿在客户端代码中公开密匙。
- 定期轮换您的密钥。使用 API 或仪表板定期轮换密匙。
- 限制您的域名。仅在您控制的域名上允许小组件运行。
- 监控使用情况。使用分析来检测异常模式。
- 使用描述性名称。根据小组件的用途对其命名,例如“登录表单”或“联系页面”。
- 区分您的环境。为开发、暂存 (staging) 和生产环境使用不同的小组件。
- 跟踪在哪些位置使用了哪些小组件。
- 在使用 Terraform 时,将您的小组件配置存储在版本控制中。