繁体   English   中英

Incapsula 如何工作以及如何击败它

[英]How Incapsula works and how to beat it

Incapsula 是一个 web 应用交付平台,可用于防刮。

我在 Python 和 Scrapy 工作,我发现了这个,但它似乎已经过时并且不适用于当前的 Incapsula。 我用我的目标网站测试了 Scrapy 中间件,由于中间件无法提取一些混淆参数,我得到了 IndexErrors。

是否有可能调整这个 repo 或者 Incapsula 现在改变了它的操作模式?

我也很好奇如何将请求从 chrome 开发工具“复制为 cURL”到我的目标页面,并且 chrome 响应包含用户内容,但 curl 响应是一个“封装事件”页面。 这适用于最初清除 cookies 的 chrome .....

curl 'https://www.radarcupon.es/tienda/fotoprix.com' 
-H 'pragma: no-cache' -H 'dnt: 1' -H 'accept-encoding: gzip, deflate, br' 
-H 'accept-language: en-GB,en-US;q=0.9,en;q=0.8' 
-H 'upgrade-insecure-requests: 1' 
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/62.0.3202.94 Chrome/62.0.3202.94 Safari/537.36' 
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' 
-H 'cache-control: no-cache' -H 'authority: www.radarcupon.es'
 --compressed

我期待双方的第一个请求返回类似 javascript 挑战的内容,这将设置一个 cookie,但现在它似乎不太像那样工作?

很难给出具体的答案,因为 Incapsula 有一个非常详细的规则引擎,可以用来阻止或挑战请求。 Cookie 检测和 Javascript 支持是用于识别可疑流量的两个最常见的数据点; 源自客户端 IP 地址的用户代理字符串、标头和行为(每分钟请求数、AJAX 请求等)也可能导致 Incapsula 挑战流量。 如果 DDoS 保护功能没有根据站点看到的流量进行合理配置,则会主动阻止请求。

可能有多种原因。 很难准确指出 Incapsula 应用哪些规则组合来将您检测为机器人。 它可以使用 IP 速率限制、浏览器指纹识别、标头验证、TCP/IP 指纹识别、用户代理等...

但是你可以试试

  • 轮换IP。

    您可以在互联网上轻松找到免费代理列表,并且可以使用像scrapy-rotating-proxies中间件这样的解决方案在您的蜘蛛中配置多个代理,并让请求自动通过它们轮换。

  • 轮换 USER_AGENT。

    导航此过滤器的一种方法是将您的 USER_AGENT 切换为从流行的 Web 浏览器使用的值复制的值。 在极少数情况下,您可能需要来自特定 Web 浏览器的用户代理字符串。 有多个 Scrapy 插件可以通过流行的 Web 浏览器用户代理字符串轮换您的请求,例如scrapy-random-useragentScrapy- UserAgents

  • 您可以尝试检查开发人员工具并对请求参数进行逆向工程。

大多数情况下,目标是通过牢记最佳实践来避免被禁止。 你可以在这里阅读它们。 或者您也可以尝试使用专用工具,例如智能代理管理器智能浏览器 我是一名开发者倡导者@Zyte。

Incapsula 与许多其他反爬虫服务一样,使用 3 种类型的详细信息来识别 web 爬虫:

  1. IP 地址元信息
  2. Javascript 指纹识别
  3. 请求分析

为了绕过这种保护,我们需要确保这些细节与普通 web 用户的细节相匹配。

IP 地址

一个自然的 web 用户通常从住宅或移动 IP 地址连接,其中许多生产爬虫部署在数据中心 IP 地址(谷歌云、AWS 等)上。 这 3 种类型差别很大,可以通过分析 IP 数据库来确定。 顾名思义:datacenter - 商用 IP 地址,住宅 - 家庭地址,mobile 是基于基站的移动网络(3G、4G 等)

因此,我们希望通过住宅或移动代理池分发我们的爬虫网络。

Javascript 指纹识别

使用 javascript,这些服务可以分析浏览器环境并构建指纹。 如果我们正在运行浏览器自动化工具(如 Selenium、Playwright 或 Puppeteer)作为 web 刮板,我们需要确保浏览器环境看起来像用户一样。

这是一个巨大的主题,但一个好的开始是看看哪个puppeteer-stealth插件将补丁应用于浏览器环境以隐藏各种细节,这些细节揭示了浏览器受脚本控制的事实。

注意: puppeteer-stealth是不完整的,你需要做额外的工作才能可靠地通过 Incapsula。

所以答案有点简短,但我在我的博客How to Avoid Web Scraping Blocking 上写了关于这个主题的广泛介绍:Javascript

请求分析

最后,我们的刮板连接方式也起着巨大的作用。 连接模式可用于确定客户端是真实用户还是机器人。 例如,真实用户通常以更混乱的模式浏览网站,例如转到主页、类别页面等。

隐秘的刮板应该在刮板连接模式中引入一些混乱。

Curl 不打算砍了

当您询问使用 CURL 因为 Incapsula 依赖于 JS 指纹识别时,在这种情况下您不会有太多运气。 但是,有几件事情需要注意可能对其他系统有所帮助:

  • HTTP2/3 协议会有更高的成功率。 Curl 和许多其他 http 客户端默认为 http 1.1 和大多数真实用户流量运行 http2+ - 这是一个死的赠品。
  • Header 值和顺序也很重要,因为真实的浏览器(Chrome、Firefox 等)具有特定的 header 顺序和值。 如果您的刮刀连接不同 - 这是一个死的赠品。

了解将机器人流量与真实人类流量区分开来的这 3 个细节可以帮助我们开发更隐蔽的抓取工具。 如果您想了解更多如何在不被阻止的情况下进行刮擦,我在我的博客上写了更多关于这个主题的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM