2024 年如何绕过 Cloudflare

2024 年如何绕过 Cloudflare

前言

您需要抓取的网站中大约有 1/5 使用 Cloudflare,这是一个硬核的反机器人保护系统,可以轻松阻止您。所以,你可以做什么? 😥 交流学习author_v传送门:yaoqing012

什么是 Cloudflare 机器人管理

Cloudflare 是一家 Web 性能和安全公司。在安全方面,他们为客户提供了Web 应用程序防火墙 (WAF)。 WAF 可以保护应用程序免受多种安全威胁,例如跨站点脚本 (XSS)、撞库和 DDoS 攻击。

Cloudflare 的 Bot Manager 是其 WAF 中包含的核心系统之一。作为机器人防护解决方案,其主要目标是在不影响真实用户的情况下减轻恶意机器人的攻击。

Cloudflare 承认某些机器人的重要性。例如,没有网站愿意故意阻止谷歌或其他搜索引擎抓取其网页。考虑到这一点,Cloudflare 维护了一个已知良好机器人的允许名单。

Cloudflare 如何检测机器人?

Cloudflare 使用的 bot 检测方法一般可以分为两类:被动和主动。被动机器人检测技术包括在后端执行的指纹检查,而主动检测技术则依赖于在客户端执行的检查。让我们一起深入了解每个类别的一些示例!

Cloudflare 被动机器人检测技术

以下是 Cloudflare 采用的一些被动机器人检测技术的非详尽列表:

检测僵尸网络

Cloudflare 维护已知与恶意机器人网络相关的设备、IP 地址和行为模式的目录。任何被怀疑属于这些网络之一的设备要么被自动阻止,要么面临额外的客户端挑战需要解决。

IP地址信誉

用户的 IP 地址信誉(也称为风险评分或欺诈评分)基于地理位置、ISP 和信誉历史等因素。例如,属于数据中心或已知 VPN 提供商的 IP 的声誉将比住宅 IP 地址差。站点还可以选择限制从其服务区域之外的区域访问站点,因为来自实际客户的流量永远不应该来自那里。

HTTP 请求标头

Cloudflare 使用 HTTP 请求标头来确定您是否是机器人。如果您有非浏览器用户代理,例如python-requests/2.22.0,您的抓取工具很容易被识别为机器人。如果您的机器人发送的请求缺少浏览器中本来存在的标头,Cloudflare 也可以阻止您的机器人。或者,如果您的用户代理的标头不匹配。例如,包含sec-ch-ua-full-version-list:Firefox 用户代理的标头。

TLS 指纹识别

此技术使 Cloudflare 的反机器人能够识别用于向服务器发送请求的客户端。

尽管有多种对 TLS 进行指纹识别的方法(例如JA3、JARM和CYU),但每种实现都会针对每个请求客户端生成静态的指纹。TLS 指纹识别很有用,因为浏览器的 TLS 实现往往与其他发行版本、其他浏览器和基于请求的库的实现不同。例如,Windows(版本 104)上的 Chrome 浏览器将具有与以下所有浏览器不同的指纹:

Windows 上的 Chrome 浏览器(版本 87)

火狐浏览器
Android 设备上的 Chrome 浏览器
Python HTTP 请求库
TLS 指纹的构建发生在TLS 握手期间。 Cloudflare 分析“客户端问候”消息中提供的字段(例如密码套件、扩展名和椭圆曲线),以计算给定客户端的指纹哈希。

接下来,在预先收集的指纹数据库中查找该哈希值,以确定请求来自哪个客户端。假设客户端的哈希值与允许的指纹哈希值(即浏览器的指纹)匹配。在这种情况下,Cloudflare 会将客户端请求中的用户代理标头与与存储的指纹哈希关联的用户代理进行比较。

如果它们匹配,则安全系统假定该请求源自标准浏览器。相反,客户端的 TLS 指纹与其公布的用​​户代理之间不匹配表明明显使用了自定义机器人软件,从而导致请求被阻止。

HTTP/2 指纹识别

HTTP/2 规范是第二个主要 HTTP 协议版本,于 2015 年 5 月 14 日发布,作为RFC 7540。所有主流浏览器都支持该协议。

HTTP/2 的主要目标是通过引入标头字段压缩并允许同一 TCP 连接上的并发请求和响应来提高网站和 Web 应用程序的性能。为了实现这一目标,HTTP/1.1 的基础通过新的参数和值进行了扩展。这些新的内部结构正是 HTTP/2 指纹的基础。

二进制框架层是 HTTP/2 的新增内容,也是HTTP/2 指纹的核心焦点。

如果您有兴趣更深入地分析 HTTP/2 指纹识别,您应该在此处阅读 Akamai 提出的 HTTP2 客户端指纹识别方法:HTTP/2 客户端的被动指纹识别。但现在,这里有一个总结:

HTTP/2 指纹由三个主要组件组成:

框架: SETTINGS_HEADER_TABLE_SIZE, SETTINGS_ENABLE_PUSH, SETTINGS_MAX_CONCURRENT_STREAMS, SETTINGS_INITIAL_WINDOW_SIZE, SETTINGS_MAX_FRAME_SIZE, SETTINGS_MAX_HEADER_LIST_SIZE, WINDOW_UPDATE
** 流优先级信息:**StreamID:Exclusivity_Bit:Dependant_StreamID:Weight
伪标头字段顺序::method、:authority、:scheme和标头的顺序:path。
如果您好奇,可以单击此处测试实时 HTTP/2 指纹识别演示。

与 TLS 指纹一样,每个请求客户端都会有一个静态 HTTP/2 指纹。为了确定请求的合法性,Cloudflare 始终验证请求中的指纹和用户代理对是否与其数据库中存储的白名单相匹配。

HTTP/2 指纹识别和 TLS 指纹识别齐头并进。在 Cloudflare 使用的所有被动机器人检测技术中,这两种技术在基于请求的机器人中控制起来最具技术挑战性。然而,它们也是最重要的。所以,你要确保你做对了,否则就有被屏蔽的风险!

方法1:通过调用源服务器绕过 Cloudflare CDN

Cloudflare 只能阻止通过其网络的请求,所以如果我们可以直接向源服务器发送请求不是很好吗?您和您想要的数据之间没有任何防御!

这并不总是可行,但在可行时很有用。首先查找托管内容的服务器的 IP 地址。获得源 IP 后,您可以向不受 Cloudflare 反机器人保护的服务器执行请求。

我们这里有两个步骤:获取源IP地址并执行请求。

查找源IP地址

受 Cloudflare 保护的网站将隐藏其 DNS 记录…但可能不是到处都是:一些不受保护的子域、旧服务或邮件可能在同一域名下可用,但指向源服务器。

有几个网站可以为您提供这方面的有用信息。例如,像ShodanCensys这样的数据库,或者像CloudFlairCloudPeler这样的工具,可能会显示它们的一些内部结构。并非所有目标都会出现在那里,许多目标不会有任何有用的条目,但有些目标可能会暴露其数据。

向源站请求数据

您获得了原始 IP 地址,太棒了!但现在……该怎么办呢?您可以尝试将其粘贴到浏览器的地址栏上,但可能会失败。这是一种常见的服务器配置,仅允许使用有效域名(例如 )的连接,example.com而不是 IP 地址。

但是使用域名会转到 DNS,对吧?所以我们需要避免这些。

您可以尝试使用 cURL 等工具,它允许您向目标 IP 发送请求,但强制主机。另一种选择是尝试强制您的主机文件(即/etc/hosts),因为请求不会检查 DNS 并会使用您手动设置的 IP。

这一切听起来不错,但第一种方法在很多情况下不起作用。在下一节中,我们将通过分析其核心:Cloudflare 等候室,了解 Cloudflare 的反机器人如何将其防御技术付诸实践。

方法2:实施强化的无头浏览器

遵循 FlareSolverr 的想法,您可以尝试自己运行无头浏览器。但在实施此选项之前请继续阅读。

由于无头浏览器是为测试而不是抓取而设计的,因此它们具有多个特征,使 Cloudflare 可以轻松识别它们,例如navigator.webdriver像 Selenium 那样公开。

不用担心,每种最流行的无头浏览器都有解决方案:

Selenium: unDetected_chromedriver优化并修补了基础 Selenium,使其准备好进行抓取。

Puppeteer:使用 Puppeteer 时必须安装Stealth 插件。Puppeteer 额外库附带了其他有用的插件(即 adblocker 😉)。

Playwright:上面提到的隐形插件也适用于 Playwright!

这些都是很棒的项目,如果应用了抓取补丁,效果会更好,但它们也有重要的缺点,例如上面提到的内存和资源消耗。而且,如果你不小心的话,带宽也会受到影响。

普通页面压缩后可能约为 10-50 kB 或更少。如果我们添加所有资源(CSS、JavaScript、图像),很容易就会变成 1-5 MB。你可能需要代理,对吧?其中许多按 GB 收费;这可不是什么好消息。

您可以阻止某些资源,例如图像,因为您可能不需要它们。但阻挡时要小心;过于激进,Cloudflare 会检测到您。

需要注意的是,反机器人系统会加载某些资产来执行检查。 JavaScript 是每个人都在谈论的,但他们不会仅限于此。有时图像和/或样式表也很重要,不加载它们是安全系统阻止您的明确指示。

方法三 JavaScript逆向(需要一定的实力)

在这里插入图片描述

方法四 对接打码平台

yescaptcha: https://yescaptcha.com/i/Tcb4tM
capmonster: https://capmonster.cloud/Dashboard

就水到这里吧,黔驴技穷了,下次接着水。。。 有想法欢迎加卫星交流:yaoqing012

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫绕过Cloudflare的方法可以包括以下几个步骤: 1. 使用代理:Cloudflare可能会根据IP地址来判断请求的真实性。通过使用代理服务器,您可以隐藏您的真实IP地址,使Cloudflare难以识别您的请求是来自机器人还是真实用户。您可以选择使用公开的代理服务器,或者购买专业的代理服务来确保稳定和安全。 2. 改变请求头信息:Cloudflare也会检查请求的头信息来判断是否是机器人。通过修改请求头中的参数,比如User-Agent、Referer等,使其看起来更像是真实用户的请求。您可以随机生成这些参数,以增加其真实性。 3. 模拟人类行为:Cloudflare可以根据爬虫的行为模式来判断是否是机器人。为了避免被阻止,可以模拟人类的浏览行为,比如增加随机的点击、滚动和鼠标移动。这样可以使爬虫的行为更接近真实用户,减少被识别为机器人的概率。 4. 处理验证码:有些网站通过在Cloudflare的反机器人页面上显示验证码来验证用户的身份。爬虫需要能够识别并自动处理这些验证码,以继续访问受保护的页面。可以使用OCR技术或者借助第三方服务来自动识别和解决验证码。 需要注意的是,绕过Cloudflare的反机器人页面可能涉及到违反网站的服务条款和法律法规。在尝试绕过Cloudflare之前,建议您先与网站所有者或管理员进行沟通,以确保您的行为合法且符合网站的规定。同时,谨慎使用这些方法,并遵守相关法律法规,以免引起法律问题。 总结起来,爬虫绕过Cloudflare的方法包括使用代理、改变请求头信息、模拟人类行为和处理验证码等。这些方法都旨在模仿真实用户的行为,从而减少被Cloudflare识别为机器人的概率[2]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值