簡體   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