如何绕过Incapsula(Imperva)防火墙
Incapsula 是互联网上最流行的反抓取保护之一,这意味着绕过它的能力已成为成功的数据提取项目所必需的。
Incapsula是一种常见的反爬虫技术,主要通过识别和阻止机器人行为来防止数据被爬取。要绕过Incapsula,可以采取以下几种策略:
- 设置User-Agent和Headers:在发送请求时,可以设置User-Agent和其他Headers以模拟正常的浏览器行为。这可以帮助避免被识别为爬虫
- 使用代理IP:使用代理IP可以帮助隐藏爬虫的真实IP地址,从而避免被Incapsula识别和封锁
- 使用专业的爬虫框架:例如Scrapy,这些框架通常包含一些反检测机制,可以提高爬取成功率
- 模拟人类行为:通过记录和模拟人类的浏览行为,例如鼠标移动和键盘输入,可以尝试欺骗Incapsula的机器人识别模型
- 处理Incapsula的JavaScript挑战:Incapsula可能会发送一个JavaScript挑战,需要客户端执行并返回结果。可以尝试解析和执行这些JavaScript代码,然后将结果返回给服务器
因为Incapsula和其他反爬虫技术会不断更新以提高其检测能力。此外,过于频繁的请求或使用暴力破解等方式可能会触发更严格的限制!
在本指南中,我讲重点对使用下面三种不同的方法绕过 Incapsula(现在称为 Imperva):
但首先,让我们更多地了解系统本身。
什么是 Incapsula(现在是 Imperva)?
Incapsula 是一种 Web 应用程序防火墙 (WAF),它使用高级安全措施来保护网站免受攻击,例如 DDoS,阻止类似于非人类的流量。不幸的是,这包括各种机器人,尽管它们的意图是合法的。
我们将通过深入了解 Incapsula 的工作原理,了解如何绕过 Incapsula 进行网络抓取。
Incapsula 的工作原理
防火墙充当客户端和服务器之间的中介:当用户尝试访问受 Incapsula 保护的网站时,其 WAF 接收请求、对其进行分析,然后向源服务器发出另一个请求以检索内容。
然而,由于三种检测方法:签名、行为和客户端指纹识别,爬虫很少能超越分析阶段。
继续阅读以了解更多信息。
基于签名的检测技术
基于签名的检测方法依靠预定义的模式或签名来识别来自人类的机器人。这里有些例子:
- HTTP 请求标头:每个请求的 HTTP 标头都包含识别其发送者是否为人类的信息。例如,如果您使用命令行工具(例如,cURL)或无头浏览器,您将很容易被识别为机器人。
- IP 信誉: Incapsula 从网站访问中收集 IP 数据,并将其与已知的恶意 IP 数据库进行比较。如果您的地址有恶意攻击的历史或与僵尸网络相关联,它将遭受不良声誉,随后您的请求将被拒绝。
基于行为的检测技术
基于行为的技术包括在服务器端执行的行为分析检查。这些包括:
- 请求分析:该公司分析流量数据,例如请求的来源、速率和频率,以识别不自然的用户行为。例如,如果您以不正常的速度发送过多请求,您的机器人将看起来很可疑并被停止。
- 页面导航分析:它涉及监控页面顺序和交互的时间和频率。这样,Incapsula 就可以识别异常的导航模式并阻止相应的请求。
- 客户端交互分析:用户交互,如鼠标点击和键盘输入,对客户端有很多说明,因此 Incapsula 使用混淆脚本获取此类数据并阻止可疑请求。
客户端指纹识别技术
客户端指纹识别涉及客户端的特征以识别机器人程序。让我们用一些例子来详细说明:
- 设备指纹:此技术用于识别用户的设备。该公司收集有关客户属性(操作系统、浏览器类型和版本、屏幕分辨率、安装的字体等)的信息,并将其整合在一起以生成唯一的用户指纹。
- JavaScript 挑战:由于客户端无法呈现 JavaScript 是机器人流量的明显标志,Incapsula 使用各种挑战来测试 JS 执行。
- 验证码:这些挑战旨在让人类通过并阻止机器人。过去,它们在检测自动化软件方面处于领先地位,但它们损害了用户体验,已退居第二位。
如何绕过 Incapsula(又名 Imperva)
提到的保护技术协同工作,还有更多的设置,那么潜在的解决方案应该是什么?我们绕过 Incapsula 的最佳选择是让我们的蜘蛛看起来尽可能像人类用户。
我们将使用两个具有不同级别的 Incapsula 反机器人保护的网站作为我们的测试场地:电子商务商店Elfa Distrelec和实施更高 Incapsula 安全措施的软件平台Vagaro 。
准备好开始了吗?您现在将学习如何绕过 Incapsula 保护。
方法#1:使用网页抓取 API
使用网络抓取 API 是一种简单的方法,因为它可以为您处理模拟自然用户行为的整个技术方面,包括旋转代理和 JavaScript 渲染等功能。
我们将看到ZenRows,一个强大的库,用于抓取任何网站,无论反机器人安全级别或项目规模如何。此外,它还与 Python、Node.js、Java、PHP、Golang、Ruby、C# 和任何其他语言无缝集成。
然后,您将进入 Request Builder,您必须在https://www.elfadistrelec.pl
其中输入目标 URL,以及activatePremium Proxy
和。JavaScript Rendering
Antibot
现在,安装 Python 的 Requests 库来发出 HTTP 请求。
pip install requests
绕过 Incapsula 的 Python 网络抓取脚本应该如下所示:
import requests response = requests.get("https://api.zenrows.com/v1/?apikey=Your_API_Key&url=Your_Target_URL&js_render=true&antibot=true&premium_proxy=true&proxy_country=us") print(response.text)
让我们看看它如何衡量我们的第一个目标:
这是 Vagaro 的结果:
无论如何,尽管其他选项无法比较,但重要的是要看到全局并探索不同的方法。
方法#2:使用强化的无头浏览器
虽然基本的无头浏览器可以呈现 JavaScript 并模拟用户行为,但网络安全解决方案可以轻松检测到它们。然而,像Selenium这样的插件undetected_chromedriver
隐藏了可检测的特征并添加了更多功能,使机器人更难被识别。这就是所谓的实现无头浏览器的强化版本。
让我们看一个例子:
首先,安装 Selenium、WebDriverManager 和undetected-chromedriver
.
py -m pip install selenium webdriver-manager undetected-chromedriver
然后,导入undetected-chromedriver
和时间库。
import undetected_chromedriver as uc import time
为无头模式设置参数并最大化窗口。
options = uc.ChromeOptions() options.add_argument("--headless") options.add_argument("--start-maximized")
接下来的步骤涉及创建 Chrome 驱动程序实例、导航到目标 URL、等待页面加载以及截取屏幕截图。
# Create a new Chrome driver instance with the specified options with uc.Chrome(options=options) as driver: # Navigate to the website URL driver.get("TARGET_URL") # Wait for the page to load for 10 seconds time.sleep(10) # Take a screenshot of the page and save it as "screenshot.png" driver.save_screenshot("screenshot.png") # Quit the browser instance driver.quit()
这是完整的代码:
# Import the undetected_chromedriver and time libraries import undetected_chromedriver as uc import time # Set ChromeOptions for the headless browser and maximize the window options = uc.ChromeOptions() options.add_argument("--headless") options.add_argument("--start-maximized") # Create a new Chrome driver instance with the specified options with uc.Chrome(options=options) as driver: # Navigate to the website URL driver.get("TARGET_URL") # Wait for the page to load for 10 seconds time.sleep(10) # Take a screenshot of the page and save it as "screenshot.png" driver.save_screenshot("screenshot.png") # Quit the browser instance driver.quit()
结果呢?见下文。
但是我们的第二个目标 URL 呢?
遗憾的是,Vagaro 的高级机器人检测系统能够识别并阻止 Selenium 的undetected_chromedriver。
方法#3:抓取谷歌的缓存
当 Google 机器人抓取网站进行索引时,它们会缓存它们的页面。这对我们来说是一个机会,因为大多数机器人检测保护都有一个允许列表,其中包括搜索引擎,因此我们可以抓取 Google 的缓存作为解决方法。
这种方法比尝试模仿用户行为更容易,但只有当您的目标网站不经常更改其数据和您要提取的数据类型时,它才可行。更不用说有些网站不允许缓存,这意味着这不适用于每个项目。
但是让我们看一个使用 Selenium 并将前缀添加https://webcache.googleusercontent.com/search?q=cache
到我们的目标页面的示例。
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.chrome.options import Options import time options = Options() options.headless = True driver = webdriver.Chrome(options=options, service=ChromeService( ChromeDriverManager().install())) # replace the website URL with the one you want to scrape website_url = "TARGET_URL" # create the Google cache URL by adding the prefix google_cache_url = f"https://webcache.googleusercontent.com/search?q=cache:{website_url}" # navigate to the Google cache URL driver.get(google_cache_url) time.sleep(20) driver.save_screenshot("datacache.png") driver.close()
这是电子商务商店的输出:
很好,我们设法抓取了缓存!但是,数据与 Selenium 的 undetected_chromedriver 的结果相比有所不同。这意味着当您获得访问权限时,收到的内容可能不符合您的需求。
让我们现在尝试使用 Vadaro:
结果和以前一样。我们得到的只是过时的内容。
结论
虽然像 Incapsula (Imperva) 这样的安全解决方案越来越受欢迎,但找到避免它们的方法已成为任何爬虫的基本工作。
今天,您在本分步指南中学习了如何使用三种不同的方法绕过 Incapsula:
- 使用 Selenium
undetected_chromedriver
,这是一个流行的库,用于模拟未能绕过高级机器人保护的用户行为。 - 抓取谷歌的缓存导致数据过时,结果不佳。
- ZenRows 是一个著名的网络抓取 API,它成功地设法在所有难度级别检索所需的数据。
常见问题
Incapsula 和 Imperva 一样吗?
是的,Incapsula 和 Imperva 是一样的。故事是,Incapsula 成立于 2009 年,起源于另一家公司,后者拥有其 85% 的股份。然后,Imperva 在 2014 年收购了剩余的所有权。
我如何摆脱 Imperva?
摆脱 Imperva 的方法是尽你所能模拟人类行为,因为防火墙使用高级反机器人技术。因此,您离自然用户越近,绕过 Imperva 的机会就越高。
你如何绕过Incapsula?
随着其机器人管理系统的不断发展,绕过 Incapsula 并不意味着合适。但是,通过采用先进的方法使您无法被发现,例如,使用像 ZenRows 这样的信誉良好的抓取 API,您可以成功绕过防火墙。
Incapsula 是 WAF 吗?
Incapsula 是一种 Web 应用程序防火墙 (WAF),它结合使用客户端指纹、基于签名和基于行为的分析来实时识别和阻止机器人程序。该公司还提供负载平衡和 CDN 等服务。
来源:
[1] https://blog.csdn.net/yu_20170610/article/details/103953378
[2] https://www.volcengine.com/theme/3688825-Z-7-1
[3] https://www.uedbox.com/post/56715/
[4] https://blog.csdn.net/jackisthebestone/article/details/53535752
[5] https://www.zhihu.com/question/49995249/answer/147550712?utm_id=0
[6] https://www.secrss.com/articles/9746
[7] https://cloud.tencent.com/developer/ask/sof/115019824
[8] https://blog.csdn.net/HanHnnnn/article/details/122809392
[9] https://www.cnblogs.com/zhengna/p/15129407.html
[10] https://juejin.cn/post/6844903799895638029
[11] https://www.zhihu.com/question/49995249?from=profile_question_card&utm_id=0
[12] https://www.oschina.net/informat/%E6%80%8E%E4%B9%88%E8%B7%B3%E8%BF%87Incapsula
[13] https://www.gaia.net/sc/brands_detail/0/9/33/imperva
[14] https://freebuf.com/articles/web/336869.html
[15] https://www.gaia.net/tc/brands_detail/0/3/5/imperva
[16] http://www.langzi.fun/Sqlmap%E9%80%9F%E6%9F%A5%E8%A1%A8%E4%B8%8EPython%E8%BF%9B%E8%A1%8C%E5%8A%9F%E8%83%BD%E7%A7%BB%E6%A4%8D.html
[17] https://segmentfault.com/q/1010000043138054