Scarnox · Blog

Cloudflare Turnstile:工作原理与求解方法(即将支持)

Cloudflare Turnstile 是一种通常无需访客做任何操作的验证码。它在浏览器中运行检查,大多数情况下无需任何谜题即可通过。当它无法确定时,可能会显示一个简短的交互步骤。随后组件会把一个 token 写入表单,网站再与 Cloudflare 核实该 token。Scarnox 对 Turnstile 的支持即将推出。本指南解释该组件的工作原理、它为何经常被误认为其他挑战,以及合法工作中的通用做法。

组件如何嵌入页面

页面中包含一个带有 cf-turnstile 类和 data-sitekey 属性的容器元素。Turnstile 脚本加载后运行检查,并添加一个名为 cf-turnstile-response 的隐藏输入框。该输入框的值就是 token。表单会与其他字段一起提交它,网站的后端则会连同站点的密钥把它发送到 Cloudflare 的校验接口。

与其他 token 组件一样,校验发生在服务端。如果表单接受该字段中的任何值而不做检查,那么它实际上并没有受到保护。

各种模式及其对脚本的意义

Turnstile 可以以多种模式运行。在托管模式下,由 Cloudflare 决定是否显示交互步骤。在非交互模式下,组件从不要求访客做任何事情,只显示状态。在无感模式下,则什么都不显示。对于脚本而言,模式会改变你在页面上看到的内容,但结果是一样的:表单字段中有一个 token,并在服务端完成校验。

token 有效期短,且只能使用一次。请在组件生成 token 之后尽快提交表单,并且不要重复使用已经通过校验的 token。

为什么它会阻止自动化

Turnstile 会查看来自浏览器环境的信号,以及会话的行为。默认的无头浏览器、缺失或不一致的浏览器功能、没有历史记录的新会话,以及可疑的网络地址,都可能把判断推向挑战或拦截。这些信号与其他基于评分的检测属于同一类,因此应对方法也相似。

合法的做法

以下做法适用于合法的工作:

  1. 在加载 Turnstile 的页面上使用真实浏览器。 一个设置一致的普通浏览器配置文件,比精简的自动化构建版本更不容易被挑战。无头浏览器检测指南列出了常见的信号。
  2. 保持会话。 在工作流程的各个页面之间保留 cookie,使访客不会在每次请求时都显得像新用户。
  3. 控制请求频率。 稳定、接近人类的节奏,比任何单一技巧都更能减少挑战。
  4. 先阅读受 Cloudflare 保护的网站的规则。 许多受保护的网站会发布 API 或数据源。在构建浏览器工作流程之前,先确认是否存在这些途径。抓取 Cloudflare 保护网站指南对该方法有更深入的介绍。
  5. 在开发中使用测试密钥。 Cloudflare 为开发提供测试用的 site key,它们会产生可预测的结果,而无需真实的检查。它们只用于你自己的集成测试,而不用于生产环境的流量。
  6. 询问网站所有者。 如果你运营该网站,可以为你的自动化测试所经过的路径调整 Turnstile 设置。如果不是你运营的,请申请白名单或 API。

Turnstile 求解器会做什么

基于 token 的 Turnstile 求解器会接收 sitekey 和页面 URL,为 cf-turnstile-response 字段生成有效的 token,并将其返回给你的代码。你的代码把 token 写入表单,并及时提交。这与已上线的 PopularCaptcha 集成采用相同的模式,只是任务类型不同。

Scarnox 目前尚未实时支持 Turnstile 求解。唯一可用的任务类型是无代理的 PopularCaptcha。Turnstile 即将推出,其请求细节会在上线时写入 API 参考文档。在此之前,请不要基于假定的接口进行开发。

常见错误

Turnstile 的集成往往会以几种可预见的方式失败。最常见的是使用了已过期的 token,或者使用了已经校验过的 token。token 只能使用一次,因此在表单提交失败后重试,需要的是新的组件结果,而不是旧值。第二种常见错误是 sitekey 属于另一个环境。在生产页面上使用开发环境的密钥,或者反过来,都会导致校验失败,看起来像是你的代码有 bug。在调试其他问题之前,先检查页面使用的是哪个密钥。

另一个常见错误是把交互步骤当作失败。在托管模式下,Turnstile 可能会对部分访客显示一个简短的步骤,而期望无感通过的脚本就会卡在这一步。请让流程等待组件的结果,并处理组件要求更多操作的情况。

最后,不要在没有在实时页面上核对的情况下硬编码字段名称。cf-turnstile-response 输入框是标准做法,但网站可能会以不同方式包装组件,直接读取渲染后的表单比猜测更快。

负责任地抓取

抓取受 Turnstile 保护的网站是常见的工作,它与其他任何抓取工作一样需要谨慎。请检查 robots.txt 和服务条款,保持较低的请求频率,并且不要收集你不需要的个人数据。如果网站提供 API,请优先使用它。网页抓取是否合法指南涵盖了主要问题。

做好准备

注册账户,即可获得免费试用额度,无需信用卡。当 Turnstile 支持上线后,你可以先在自己的页面上测试,再对真实网站运行任何操作。

下一步