in

如何在网络爬取时绕过Imperva (Incapsula)

如何在网络爬取时绕过Imperva (Incapsula)

Imperva(又名 Incapsula)是一种流行的WAF服务,被Glassdoor、Udemy、wix.com 等网站使用。 该服务用于阻止机器人和网络爬取工具访问网站。因此,要从这些网站爬取公共数据,爬取工具需要绕过 Imperva Incapsula 机器人保护。 在本文中,我们将了解如何绕过 Imperva 的反爬取保护。我们将首先快速了解一下什么是 Imperva、如何识别它以及它如何识别网络爬取工具。然后,我们将了解绕过 Imperva 机器人防护的现有技术和工具。让我们深入了解吧!

什么是 Imperva(又名 Incapsula)?

Imperva(以前称为 Incapsula)是一个WAF服务套件,用于保护网站免受不需要的连接的影响。尽管在网络爬取的背景下,它具有合法用途,但它用于阻止网络爬取工具访问公共数据。 Imperva/Incapsula 是阻止网页爬取的网站最早使用的 WAF 服务之一,并且普遍被网页爬取社区所熟知。那么,让我们看看如何识别它以及它如何识别网络爬虫。

Imperva 块页面示例

大多数 Imperva 机器人阻止都会生成 HTTP 状态代码 400-500,其中最常见的是 403。此外,阻止页面可以出现在状态代码 200 中,以阻止网络爬虫。 HTML 内容通常表明该块由 Imperva 提供支持:

Leboncoin 上的 Imperva 区块页面的屏幕截图

giffgaff.com 网站上的 Imperva 区块页面

这些错误大多是在第一次请求网站时遇到的。不过,由于 Incapsula 使用持续跟踪,它可以在爬取过程中的任何时候开始阻塞相同的页面。 这是 Incapsula 块碎片的完整列表。

  • Powered By IncapsulaHTML 中的文本片段。
  • Incapsula incident IDHTML 中的关键字。
  • _Incapsula_ResourceHTML 中的关键字。
  • subject=WAF Block PageHTML 中的关键字。
  • visid_incap请求标头中的值。
  • X-Iinfo响应头。
  • Set-Cookie标头有 cookie 字段incap_sesvisid_incap.

Imperva 如何识别网络爬取工具?

为了检测网页爬取,Imperva 正在利用许多不同的分析和指纹识别技术。 Imperva 正在结合使用这些技术来为每个连接客户端建立唯一的指纹和信任评分。 根据最终的信任评分,Imperva 决定是否阻止客户端、允许其通过或请求额外验证(如验证码)。 这个过程的复杂性可能非常令人畏惧,但如果我们看一下每个单独的组件,我们就会发现绕过 Imperva 是可能的。让我们看一下每个组件。

TLS 指纹识别

TLS(或 SSL)指纹识别是一种基于客户端和服务器协商加密连接的方式来识别客户端的现代技术。这称为JA3指纹。 对于安全连接(即https),需要协商加密方法,因为有许多不同的密码和加密选项。因此,如果连接客户端具有异常功能,则可以轻松识别。 与网络浏览器相比,网络爬取中使用的库可以具有不同的加密功能。因此,即使在发出实际的 HTTP 请求之前,网络爬取工具也可以通过其 TLS 指纹轻松识别。 为了避免这种情况,请使用抗 JA3 的库和工具。 有关更多信息,请参阅我们对 TLS 指纹识别的完整介绍,其中更详细地介绍了 TLS 指纹识别。

IP 地址指纹识别

下一步是 IP 地址分析。Imperva 可以访问 IP 元信息数据库,该数据库可用于识别客户的意图和能力。 例如,如果 IP 地址属于已知的代理或数据中心服务,则可以轻松将其识别为机器人。如果 IP 地址来自住宅 ISP,则该地址更有可能是人类。移动网络也是如此。 因此,请使用高质量的住宅或移动代理以避免被检测到。 如需更深入的了解,请参阅我们对 IP 阻止以及机器人检测中使用的 IP 元数据字段的完整介绍。

HTTP 详细信息

连接建立后,下一步是 HTTP 连接分析。 首先,大多数自然网络都在 HTTP2 和 HTTP3 上运行(这是网络浏览器更喜欢的)。因此,任何 HTTP1 连接自然都是可疑的。大多数 HTTP 库仍然使用或默认使用 HTTP1.1,这是一个死的赠品。更现代且功能丰富的库(例如 Python 的httpx或 cURL)支持 HTTP2,但默认情况下不支持。 然后,请求标头值和顺序可用于识别客户端。Web 浏览器标头生成易于理解且可靠,因此 Web scrapers 可以与之匹配。例如,Web 浏览器会按照特定的启动顺序发送User-AgentOrigin和等标头。Referer 因此,请确保使用 HTTP2 并匹配标头值和真实 Web 浏览器的顺序。 有关更多信息,请参阅我们对请求标头在阻止中的作用的完整介绍

JavaScript 指纹识别

最后一步是 Javascript 指纹识别。这是一种非常强大的技术,可用于根据客户端执行 Javascript 代码的方式来识别客户端。 由于服务器可以在客户端计算机上执行几乎任何任意 JavaScript 代码,因此它可以提取有关客户端的大量信息,例如:

  • JavaScript 引擎详细信息
  • 硬件和操作系统信息
  • Web 浏览器数据和渲染功能

有大量数据可用于识别网络爬取工具。 为了处理这个网络爬虫有两种方法: 首先,我们可以拦截 JavaScript 指纹并向 Imperva 提供虚假数据。然而,这需要大量工作并且不太可靠,因为对指纹识别代码的任何更新都会破坏爬取。 或者,我们可以使用无头浏览器来执行 JavaScript 代码。这是一种更可靠的方法,因为指纹识别代码不太可能改变。 无头浏览器可以通过PuppeteerSeleniumPlaywright等网页爬取库进行控制。这些工具可用于控制真实的 Web 浏览器,以与 Imperva 建立值得信赖的连接。 因此,将无头浏览器自动化与 Selenium、Puppeteer 或 Playwright 结合使用是处理 javascript 指纹识别的简单方法 许多高级网络爬取工具可以在无头浏览器和原始 HTTP 连接之间切换。因此,可以使用基于慢速浏览器的爬取来建立信任分数,然后切换到快速 HTTP 请求。

行为分析

即使我们解决了所有这些检测方法,Imperva 仍然可以识别爬取工具以进行连续行为分析。 由于 Imperva 正在跟踪所有连接详细信息和模式,因此它可以使用此信息不断调整信任评分,这可能会导致阻止或验证码挑战。 因此,使用代理和不同的指纹配置通过多个代理分发爬取非常重要。 例如,当使用浏览器自动化工具进行爬取时,使用一系列不同的配置文件(例如屏幕尺寸、操作系统、渲染功能以及 IP 代理)非常重要。

如何绕过 Imperva?

我们可以看到,Imperva 的反机器人技术发生了很多事情,并且由于它使用基于分数的方法,我们不一定需要完美绕过所有检测方法。快速总结一下,可以改进爬取工具以避免检测:

  • 使用高质量的住宅或移动代理
  • 对所有请求使用 HTTP2(或更高版本)版本
  • 匹配请求标头值和真实 Web 浏览器的顺序
  • 使用无头浏览器自动化生成 Javascript 指纹
  • 通过多个代理分配网络爬取流量

请注意,随着 Imperva 正在开发和改进其方法,与网络爬取工具和库更新保持联系非常重要。例如,请参阅Puppeteer的 Puppeteer 隐形插件,该插件可跟踪新的指纹识别技术。

常问问题

作为本文的总结,我们来看看有关网页爬取 Imperva 受保护页面的一些常见问题:

是的。只要爬取工具不会对网站造成损害,网络爬取公开数据在世界各地都是完全合法的。

是否可以使用缓存服务绕过 Imperva?

是的,像 Google Cache 或 Archive.org 这样的公共页面缓存服务有时可以用来绕过 Imperva 保护,因为 Google 和 Archive 往往会被列入白名单。然而,并非所有页面都会被缓存,而且那些页面通常已经过时,因此不适合网络爬取。缓存的页面也可能会丢失动态加载的部分内容。

是否可以完全绕过 Imperva 并直接爬取网站?

网络安全是一个复杂的话题,所以是的,但不建议这样做,因为这在某些国家可能是非法的,而且一般来说是不可持续的。

还有哪些其他反机器人服务?

还有许多其他反机器人WAF服务,例如CloudflareAkamaiDatadomePerimeterX,尽管它们的功能与 Imperva 的 Incapsula 非常相似,因此本教程中的所有内容也可以应用于它们。

概括

在本指南中,我们了解了如何在网页爬取时绕过 Incapsula(现在称为 Imperva)。 首先,我们了解了 Imperva 正在使用的检测方法,以及如何在我们的爬取代码中解决其中的每一种方法。我们看到,在 Imperva 的机器人拦截方面,使用住宅代理和修补常见指纹识别技术可以极大地提高信任评分。 最后,我们研究了一些常见问题,例如替代绕过方法及其合法性。

Written by 河小马

河小马是一位杰出的数字营销行业领袖,广告中国论坛的重要成员,其专业技能涵盖了PPC广告、域名停放、网站开发、联盟营销以及跨境电商咨询等多个领域。作为一位资深程序开发者,他不仅具备强大的技术能力,而且在出海网络营销方面拥有超过13年的经验。