Web 安全创新:Cloudflare Bot Challenge 和 Turnstile 如何保护网站流量
随着互联网技术的不断发展,网站资源的安全性成为网站所有者和开发人员的首要任务。使用有效的保护工具来抵御机器人和自动威胁已成为当务之急。
Cloudflare 的解决方案(Bot Challenge 和 Turnstile)因其创新性以及用户友好性和可靠保护之间的平衡而脱颖而出。让我们仔细了解一下它们的运行机制。
据开发人员称,创建这些技术的主要目的是在不影响真实用户的情况下减轻恶意机器人的攻击。
Cloudflare 无法绝对阻止所有僵尸,因此他们使用自己的允许僵尸列表。未包含在此列表中的其他僵尸流量将被定义为恶意流量,这意味着它们很可能会被拒绝访问受保护的页面。2;margin:9pt;" dir="ltr"> 什么是 Bot Challenge 和 Turnstile?在第一种情况下,我们仍在接受测试。在第二种情况下,一切都会为我们完成,他们会按照地铁旋转门的原理进行检查。如果我们的芯片正常,就可以进来。不,那就意味着被列入黑名单。
机器人挑战示例(选项可能有所不同):

旋转栅栏示例:

该服务使用被动(服务器端)和主动(客户端)僵尸检测方法。
Botnet 检测
Cloudflare 维护与恶意僵尸网络相关的设备、IP 地址和行为的目录。任何被怀疑属于这些网络之一的设备都会被自动阻止或面临需要解决的其他客户端问题。
IP Reputation
用户 IP 地址的信誉基于地理位置、ISP 和信誉记录等因素。例如,属于数据中心或知名 VPN 提供商的 IP 地址的信誉会比家庭 IP 地址差。网站还可能限制从其服务区域以外的地区访问网站,因为来自真实客户端的流量绝不应该来自这些地区。
HTTP 请求头
Cloudflare 使用 HTTP 请求头进行验证。如果您使用的是非浏览器用户代理,您的解析器很容易被误认为是僵尸。如果发送的请求没有标头,服务还可以阻止僵尸。或者,如果根据您的用户代理存在不匹配的头信息。2;margin:9pt;" dir="ltr">TLS 指纹
TLS 指纹是在连接服务器时创建的。系统会分析密码套件、扩展和椭圆曲线,以计算指纹哈希值。
如果客户端请求中的用户代理标头与保存的指纹哈希值相关联的用户代理相匹配,则安全系统认为该请求来自标准浏览器。如果该数据不匹配,请求将被阻止。
Fingerprint HTTP/2
与 TLS 指纹一样,每个客户端请求都有一个静态 HTTP/2 指纹。为了确定请求的合法性,Cloudflare 会始终检查请求中的指纹和用户代理配对是否与其数据库中存储的白名单中的配对相匹配。2;margin:9pt;" dir="ltr">HTTP/2 和 TLS 指纹识别几乎完全相同。在 Cloudflare 使用的所有被动僵尸检测方法中,这两种是在技术上最难根据请求进行监控的。
Canvas 指纹
Canvas 是一个 HTML5 API,用于使用 JavaScript 在网页上绘制图形和动画。要创建 Canvas 指纹,网页会请求浏览器的 Canvas API 来呈现图像。然后对图像进行散列以创建指纹。2;margin:9pt;" dir="ltr">画布指纹取决于计算系统的多个层面,例如:
- 图形处理器 - GPU。
- GPU 驱动程序、操作系统、字体和呈现算法。
- 浏览器的图像处理机制 - WebGL。
由于更改这些类别中的任何一个都会创建唯一的指纹,因此这种方法可以准确地区分设备类别。
Cloudflare 拥有一个合法画布 + 用户代理对的大型数据集。利用机器学习,他们可以通过识别您的指纹与预期指纹之间的差异来检测设备属性(如用户代理、操作系统或 GPU)是否被篡改。2;margin:9pt;" dir="ltr">活动聆听
Cloudflare使用JavaScript在网页中添加addEventListener方法,以监听鼠标移动、鼠标点击或按键等用户操作。如果未使用这些方法,则有理由认为用户是机器人。
API 请求
浏览器专用 API。
例如,window.chrome 是一个仅存在于 Chrome 浏览器中的属性。如果您发送的数据显示您使用的是 Chrome 浏览器,但您使用的是 Firefox 的用户代理,那么很明显就会出现问题。2;margin:9pt;" dir="ltr">Timestamp API
服务使用时间戳 API,例如 Date.now() 或 window.performance.timing.navigationStart 等时间戳 API 来跟踪用户速度指标。如果这些标记与个人的正常 Internet 活动不符,用户将被阻止。
自动浏览器检测
Cloudflare 请求仅存在于自动化环境中的属性。例如,window.document.__selenium_unwrapped 或 window.callPhantom 的存在表明使用了 Selenium 和 PhantomJS。出于显而易见的原因,如果您发现了这一点,您将被阻止。2;margin:9pt;" dir="ltr">SandBox detection
有一些检查可以防止模拟浏览器环境,例如在使用 JSDOM 的 NodeJS 中。脚本可以搜索只存在于 NodeJS 中的进程对象文件。还可以使用 Function.prototype.toString.call(functionName) 来确定函数是否已更改。2;margin:9pt;" dir="ltr">Cloudflare Turnstile
Cloudflare Turnstile 是一种智能验证码替代方案。它可以嵌入到任何网站资源中,无需通过 Cloudflare 发送流量,也不会向访问者显示验证码。
Advantages of Turnstile:
- 直观、友好的用户界面。
无需破译文本或图像。
- 轻松集成其他 Cloudflare 服务。
这使它对 Cloudflare 用户具有吸引力。
- 针对垃圾邮件和网络威胁的可靠保护。
兼具安全性和用户便利性。
综上所述,似乎没有什么可以战胜这种保护。但并非一切都毫无希望,我们将从最直接的方法入手,探讨解决 Cloudflare 问题的各种方案。
Cloudflare 只能阻止通过其网络的请求,因此如果我们能将请求直接发送到源服务器就更好了。在您和所需数据之间没有任何保护!
您需要完成两个步骤:
- 查找源 IP 地址。
在安全网站上,DNS 记录将被隐藏。但可能并非处处都是:一些未受保护的子域、旧服务或邮件信息可能可以通过相同的域名访问,但仍指向otigin 服务器。
2. 从源服务器请求数据。
您已经获得了原始 IP 地址,很好!但现在......该怎么办呢?您可以尝试将其粘贴到浏览器的 URL 栏中,但这可能不起作用。这是一种常见的服务器配置,只允许使用有效域名而不是 IP 地址进行连接。由于域名的使用归属于 DNS,因此我们需要避免使用它们。
您可以尝试使用 curl 等工具,它允许您向目标 IP 地址发送请求,但会强制主机使用它。另一种方法是尝试强制使用主机文件(即 /etc/hosts),因为请求不会检查 DNS,而是使用您手动设置的 IP 地址。2;margin:9pt;" dir="ltr">What is a waiting room?您的浏览器会花一些时间来完成一些任务,以证明您不是机器人。如果您被标记为机器人,您将收到 "拒绝访问 "的错误信息。否则,您将被自动重定向到真正的网页。
您会发现自己进入 Cloudflare 等待室几秒钟。具体时间取决于目标的安全级别和您的解析器通过测试的情况。任务完成后,您将可以浏览网站一段时间。2;margin:9pt;" dir="ltr"> 如何解决 Cloudflare 等待室问题?理想情况下,解决 JavaScript 任务并证明自己是人类。不过,一个可行的方法是分析 JavaScript Cloudflare 任务,了解负责创建任务和验证响应的算法。因此,您可以重新设计脚本。
联系 Bot Challenge 和 Turnstile 的关键因素是高质量的住宅代理和精心选择的用户代理。
考虑到上述所有因素,最简单的方法是将开发的通过 Cloudflare Bot Challenge 和 Turnstile 的技术托付给 CapMonster Cloud 等资源,它为这些类型的保护提供了比其他资源便宜数倍的有效解决方案。
使用 ZennoPoster 资源,您可以实施以下 Cloudflare 十字转门解决方案:

使用正则表达式,我们可以提取出所需的 websiteKey,并将其与 API 密钥一起通过 POST 请求传递给 CapMonster Cloud。

停顿 5-7 秒后,我们会发送带有已确认任务 ID 的第二个请求。如果收到的结果带有现成的令牌,请输入并发送。如果响应中没有令牌,那么我们将在几秒钟后以相同的参数发送重复请求。2;margin:9pt;" dir="ltr">link.此外,开发人员还提供了使用 CapMonster Cloud 浏览器扩展.
总之,随着技术的发展,尤其是人工智能的引入,保护措施将不断完善,开发人员的任务也将更加复杂。但是,像 Capmonster Cloud 这样的服务不会停滞不前,而是会针对这些技术制定自己的应对措施。
Note:我们在此提醒您,该产品用于在您自己的网站和您拥有合法访问权限的网站上进行自动化测试。