PerimeterX 是市场上最受欢迎的反机器人服务之一,提供针对机器人和爬取工具的广泛保护。PerimeterX 产品 Bot Defender、Page Defender 和 API Defender 均用于阻止网络爬取工具。 在本文中,我们将了解如何绕过 PerimeterX 机器人防护。我们将通过快速查看它如何检测爬取工具以及如何修改我们的爬取代码以防止被 PerimeterX 检测来实现此目的。 我们还将介绍常见的 PerimeterX 错误和指示请求未能绕过 PerimeterX 的迹象及其含义。让我们深入了解吧!
PerimeterX是什么?
PerimeterX(又名 Human)是一项 Web 服务,可保护网站、应用程序和 API 免受爬取工具等自动化的影响。它结合使用网络技术和行为分析来确定用户是人类还是机器人。 它被Zillow.com 、 Fiverr.com等流行网站使用,因此通过了解 PerimeterX 绕过,我们可以打开许多流行网站的网页爬取。 接下来,我们来看看一些常见的 PerimeterX 错误。
流行的 PerimeterX 错误
大多数 PerimeterX 机器人阻止会导致 HTTP 状态代码 400-500,最常见的是错误 403。响应正文包含“启用 javascript”或“按住”按钮的请求。
此错误主要在第一次向网站请求时遇到,但由于 PerimeterX 使用行为分析,因此在网络爬取期间的任何时候也可能会遇到此错误。 让我们看看 PerimeterX 如何准确检测网络爬取工具和机器人,以及“按住”按钮如何工作。
PerimeterX 如何检测网络爬虫?
为了检测网络爬取,PerimeterX 使用许多不同的技术来估计流量是来自人类用户还是机器人。 PerimeterX 结合使用指纹识别和连接分析来计算每个客户端的信任评分。该分数决定用户是否可以访问该网站。 根据最终的信任评分,用户要么被允许访问该网站,要么被 PerimeterX 阻止页面阻止,该页面可以通过解决 JavaScript 挑战(即“按住”按钮)进一步绕过。 这个复杂的过程使得网络爬取变得困难,因为这里有很多因素在起作用。然而,如果我们看一下每个单独的因素,我们就会发现绕过 PerimeterX 的可能性非常大!
TLS 指纹识别
TLS(或 SSL)是 HTTP 连接建立的第一步。它用于加密客户端和服务器之间发送的数据。请注意,TLS 仅适用于https
端点(不适用于http
)。 首先,客户端和服务器协商如何完成加密,这就是 TLS 指纹识别发挥作用的地方。不同的计算机、程序甚至编程库具有不同的 TLS 功能。 因此,如果爬取工具使用与常规 Web 浏览器相比具有不同 TLS 功能的库,则可以很容易地识别出来。这通常被称为JA3指纹。 例如,一些用于网页爬取的库和工具具有可以立即识别的独特的 TLS 协商模式。虽然有些使用与 Web 浏览器相同的 TLS 技术,但很难区分。 因此,请使用能够抵抗 JA3 指纹识别的网页爬取库和工具。 有关更多信息,请参阅我们对 TLS 指纹识别的完整介绍,其中更详细地介绍了 TLS 指纹识别。
IP 地址指纹识别
下一步是 IP 地址分析。由于 IP 地址有多种不同的形状和大小,因此有大量信息可用于确定客户端是人类还是机器人。 首先,有不同类型的 IP 地址:
- 住宅地址是互联网提供商分配给普通人的家庭地址。因此,住宅 IP 地址提供了积极的信任评分,因为这些地址主要由人类使用,并且获取成本昂贵。
- 移动地址由移动电话塔和移动用户分配。因此,移动 IP 还提供了积极的信任评分,因为这些 IP 主要由人类使用。此外,由于移动塔可能会共享和回收 IP 地址,因此依赖 IP 地址进行机器人识别变得更加困难。
- 数据中心地址被分配给各种数据中心和服务器平台,例如亚马逊的AWS、谷歌云等。因此,数据中心IP提供了显着的负信任评分,因为它们很可能被机器人使用。
使用 IP 分析 PerimeterX 可以估计连接客户端是人类的可能性。首先,大多数人通过住宅 IP 进行浏览,而大多数移动 IP 用于移动流量。 因此,请使用高质量的住宅或移动代理。
HTTP 详细信息
下一步是 HTTP 连接本身。这包括 HTTP 连接详细信息,例如:
- 协议版本 大多数网络都使用 HTTP2,许多网络爬取工具仍然使用 HTTP1.1,这是一个死的赠品。许多较新的 HTTP 客户端库(例如httpx或 cURL)支持 HTTP2,但默认情况下不支持。
- 标头 请注意带
X-
前缀的标头,常见的标头(例如User-Agent
,Origin
, )Referer
可用于识别网络爬取工具。 - 标头顺序 Web 浏览器有一种特定的方式来对请求标头进行排序。因此,如果标头的排序方式与网络浏览器的排序方式不同,则可能会造成严重泄露。另外,一些 HTTP 库(例如
requests
Python 中的库)不遵循标头顺序,并且可以轻松识别。
因此,请确保网络爬取请求中的标头与真实的网络浏览器匹配,包括 ordering。 有关更多信息,请参阅我们对请求标头在阻止中的作用的完整介绍
JavaScript 指纹识别
最后,PerimeterX 武器库中最强大的工具是 JavaScript 指纹识别。 由于服务器可以在客户端计算机上执行任意 Javascript 代码,因此它可以提取有关连接用户的大量信息,例如:
- JavaScript 运行时详细信息
- 硬件详细信息和功能
- 操作系统详细信息
- 网络浏览器详细信息
这是可用于计算信任评分的大量数据。 幸运的是,JavaScript 需要时间来执行,并且容易出现误报。这限制了Javascript指纹识别的实际应用。换句话说,没有多少用户能够等待 3 秒页面加载或容忍误报。 如需真正深入的了解,请参阅我们关于javacript 在网络爬取工具检测中的使用的文章。 绕过 JavaScript 指纹识别是这里最困难的任务。理论上,可以对 PerimeterX 正在执行的所有 javascript 任务进行逆向工程和模拟,并为其提供虚假结果,尽管这不切实际。 更实用的方法是使用真正的网络浏览器进行网络爬取。这可以使用Selenum、Puppeteer或Playwright 等浏览器自动化库来完成,这些库可以启动真正的无头浏览器并导航它以进行网页爬取。 因此,将浏览器自动化引入您的爬取管道可以大大提高信任评分。 提示:许多高级爬取工具甚至可以结合浏览器和 HTTP 爬取功能以获得最佳性能。使用资源密集型浏览器建立信任评分并使用快速 HTTP 客户端(例如Python 中的 httpx)继续爬取。
行为分析
即使爬取工具的初始连接与真实的网络浏览器无法区分,PerimeterX 仍然可以通过行为分析来检测它们。 这是通过监视连接并分析客户端的行为来完成的。这包括:
- 正在访问的页面。人们的浏览模式更加混乱。
- 连接速度和速率。人类比机器人更慢、更随机。
- 加载图像、脚本、样式表等资源。
信任分数不是一个恒定的数字,会不断调整。 因此,使用代理和不同的指纹配置通过多个代理分发网络爬取流量以防止行为分析非常重要。 例如,如果使用浏览器自动化工具,每个代理应使用不同的浏览器配置,如屏幕尺寸、操作系统、Web 浏览器版本、IP 地址等。
如何绕过 PerimeterX(又名人类)机器人保护?
现在我们已经熟悉了 PerimeterX 检测网络爬虫的所有方法,让我们看看如何绕过它。 事实上,我们有两种截然不同的选择: 我们可以对所有这些技术进行逆向工程和强化,但 PerimeterX 不断更新他们的检测方法,这是一场永无休止的猫捉老鼠的游戏。 或者,我们可以使用真正的网络浏览器进行爬取。这是最实用、最有效的方法,因为确保无头浏览器看起来像真实的浏览器比重新发明它要容易得多。 然而,许多浏览器自动化工具(例如Selenium、Playwright和Puppeteer)都会留下有关其存在的数据,需要对这些数据进行修补才能获得高信任分数。为此,请参阅Puppeteer 隐形插件等项目以及其他修补已知漏洞的类似隐形扩展。 为了在 2024年通过 PerimeterX 绕过进行持续的网页爬取,这些浏览器应始终与不同的指纹配置文件重新混合:屏幕分辨率、操作系统、浏览器类型都在 PerimeterX 的机器人分数中发挥着重要作用。
常问问题
为了结束本文,我们来看看有关网页爬取 PerimeterX 页面的一些常见问题:
爬取 PerimeterX 受保护的页面是否合法?
是的。只要爬取工具不会对网站造成损害,网络爬取公开数据在世界各地都是完全合法的。
是否可以使用缓存服务绕过 PerimeterX?
是的,Google Cache 或 Archive.org 等公共页面缓存服务可用于绕过 PerimeterX 受保护的页面,因为 Google 和 Archive 往往会被列入白名单。然而,由于缓存需要时间,缓存的页面数据通常已经过时,不适合网页爬取。缓存的页面也可能会丢失动态加载的部分内容。
是否可以完全绕过 PerimeterX 并直接爬取网站?
不会。PerimeterX 直接与服务器软件集成,不经过服务器就很难到达服务器。某些服务器的 PerimeterX 可能配置错误,但可能性很小。
还有哪些其他反机器人服务?
还有许多其他反机器人WAF服务,例如Cloudflare、Akamai、Datadome和Imperva(又名 Incapsula),尽管它们的功能与 PerimeterX 非常相似,因此本教程中的所有内容也可以应用于它们。
概括
在本文中,我们深入研究了网页爬取时的 PerimeterX 反机器人系统。 首先,我们了解了 Perimeter X 如何通过 TLS、IP 和 JavaScript 客户端指纹分析来识别网络爬取工具。我们看到使用住宅代理和防指纹库是一个好的开始。此外,使用真实的网络浏览器并重新混合其指纹数据可能会使网络爬取工具更难以检测。 最后,我们研究了一些常见问题,例如替代绕过方法及其合法性。