最新 绕过Cloudflare最佳实践

  • 发表于
  • 周边

本指南将介绍如何绕过 Cloudflare 的安全机制,并成功抓取不会被阻止的网站。

最新 绕过Cloudflare最佳实践

了解 Cloudflare 的机制

Cloudflare 的Web应用防火墙(WAF)通过其全球网络来保护 Web 应用免受 DDoS 和零日攻击。它能实时阻止攻击,并利用专有算法,根据多种特征来识别并阻止恶意机器人,包括:

  • TLS 指纹:JA3 指纹用来识别客户端及其功能、配置,以验证客户端是否是真实用户。
  • HTTP/2 指纹:利用 HTTP/2 参数与已知的机器人特征进行匹配。
  • HTTP 细节:检查头部信息和 Cookie 以识别疑似机器人的配置。
  • JavaScript 指纹:收集浏览器、操作系统和硬件信息,以区分机器人与真实用户。
  • 行为分析:通过机器学习监测请求频率、鼠标移动、空闲时间等来检测机器人。

Cloudflare turnstile验证码有2种类型:

  • 独立Cloudflare Trunstile验证码:验证码小部件放在网站页面上,保护表单免受自动提交影响。参见此示例。
  • Cloudflare Turnstile挑战页面:网站上的验证码通过Cloudflare代理。参见此示例

一旦 Cloudflare 检测到可疑的机器人活动,就会发起背景 JavaScript 挑战;若无法通过则会要求输入 CAPTCHA。

绕过 Cloudflare 的技巧

Cloudflare 的专有机器人检测并非牢不可破,具体解决方案需要结合自身需求来不断试验和优化。

使用代理解决方案

Cloudflare 会根据同一 IP 发送过多请求来识别并阻止机器人。为避免这一点,可以使用优质IP代理。但如果对方还会检测 User-Agent,则需要进行相应的伪造。

伪造 HTTP 头

HTTP 头可以暴露客户端的详细信息。Cloudflare 会利用它们来区分真实浏览器和只发送少数头部信息的爬虫。大多数爬虫工具都允许你修改头部来模拟真实浏览器。常见的头部包括:

User-Agent 头

User-Agent 头会暴露所用浏览器与操作系统。Cloudflare 可能会阻止明显像机器人的 User-Agent,因此可将其伪装成常用浏览器(如 Chrome、Firefox、Safari)来提高成功率。下面是使用 Python requests 库进行设置的示例:

Referer 头

Cloudflare 会检查 Referer 头来验证请求的来源。将其伪造为一个可信的 URL,能使请求看起来更可信。

Accept 头

Accept 头用于声明客户端可处理的内容类型。模拟真实浏览器中详细的 Accept 头,可帮助避免被识别为机器人:

轮换 User Agent

重复使用相同的 UA 仍然可能被标记。从预定义列表中轮换 UA 以模仿不同的用户。像 Fake UserAgent 这样的工具简化了此过程:

使用强化的无头浏览器

如果想绕过 Cloudflare 的 JavaScript 挑战,你的爬虫必须模拟真实浏览器:执行 JavaScript、处理 Cookie、模拟用户滚动、鼠标移动和点击等操作。Selenium 等工具能完成这些,但许多无头浏览器本身也会暴露特征(例如 navigator.webdriver)。你可以使用 undetected_chromedriver、puppeteer-extra-plugin-stealth 等插件来隐藏这些特征。

以下是使用 undetected_chromedriver 的示例:

你也可以将无头浏览器与高质量代理服务结合使用,以加强对 Cloudflare 的规避能力:

浏览器频繁更新会带来新的无头检测特征,而 Cloudflare 的算法也在不断进化,可能利用这些新特征。因此,这些反侦察插件需持续维护,否则很容易失效。

整合 Bright Data 解决方案

Bright Data 的 Web Unlocker 借助 AI 技术来自动应对 Cloudflare 的反爬机制(涵盖浏览器指纹、CAPTCHA 解决、IP 轮换、请求重试等),成功率高达 99.99%。它会自动选择最佳代理,使用方式与标准代理服务器类似,只需简单的身份验证即可。使用方式示例如下:

Bright Data 的 Scraping Browser 则直接在远程浏览器中运行你的代码,并结合多重代理来解锁站点。它可以与 Puppeteer、Selenium 和 Playwright 集成,提供完整的无头浏览器环境。

常见错误

  1. 使用过时的 User Agent
    Cloudflare 保持着可疑 UA 的列表。避免与旧版浏览器相关的字符串(例如,2017 年的 Chrome/58.0.3029.110)。
  2. 忽略无头浏览器指纹
    即使使用有效的 UA,无头浏览器也会泄露自动化信号(例如,缺少像 navigator.plugins 这样的插件)。使用隐身插件,例如 puppeteer-extra-plugin-stealth
  3. 忘记 IP 轮换
    将 UA 轮换与住宅代理结合使用以避免基于 IP 的封锁。静态或粘性代理最适合保持会话一致性。
  4. 结合 TLS 指纹
    Cloudflare 检查 TLS 握手模式。像 curl_cffi (Python) 或 tls-client (JavaScript) 这样的库可以模仿真实的浏览器 TLS 指纹,从而降低检测风险。

结论

绕过 Cloudflare 可能较为复杂,且成功率会因策略不同而差异明显。更改你的 User Agent 是一种简单而有效的方法来绕过 Cloudflare,但它并非万无一失。将其与 IP 轮换、TLS 指纹和反检测工具结合使用,以获得可靠的结果。