Web 抓取攻擊,或簡稱為“抓取”,發(fā)生在機(jī)器人自動從您的網(wǎng)站收集數(shù)據(jù)時,通常是出于惡意目的,如內(nèi)容轉(zhuǎn)售和降價。爬蟲機(jī)器人模仿真實用戶在常規(guī)瀏覽器上訪問網(wǎng)站,在那里他們提取機(jī)器人程序員想要存儲在本地數(shù)據(jù)庫中的數(shù)據(jù)。

爬蟲與其他類型的機(jī)器人有何不同?
與不需要執(zhí)行很多請求的scalpers這樣的機(jī)器人相反,抓取程序經(jīng)常需要發(fā)出數(shù)百萬個請求來抓取網(wǎng)頁。盡管他們執(zhí)行的請求量很大,但 Scraper 機(jī)器人被設(shè)計為有利可圖。
例如,與剝頭皮機(jī)器人相比,爬蟲可能使用質(zhì)量較低的代理,但它們傾向于使用與其他機(jī)器人相同的底層技術(shù)。爬蟲可以基于自動化(無頭)瀏覽器,或者它們可以利用 HTTP 客戶端,如 aiohttp 和 Axios。爬蟲機(jī)器人可以定制,或者欺詐者可以利用不同的專門框架,例如 Scrapy,使爬蟲的創(chuàng)建更容易。許多機(jī)器人即服務(wù) (BaaS)也專門用于抓取——他們所要做的就是使用 API 來抓取網(wǎng)站。
如何檢測抓取攻擊?
與其他類型的攻擊一樣,可以使用三種主要類型的信號檢測抓取攻擊:
- 行為
- 名聲
- 簽名
行為
可以在服務(wù)器端和客戶端收集行為信號。在服務(wù)器端,該引擎分析用戶如何瀏覽網(wǎng)站或移動應(yīng)用程序,以檢測一段時間內(nèi)請求數(shù)量中的可疑異常值——因為機(jī)器人發(fā)出請求的速度比任何人都快得多。
在客戶端,JavaScript(用于網(wǎng)站)或 SDK(用于移動應(yīng)用程序)將收集瀏覽器中事件的詳細(xì)信息,例如點(diǎn)擊、觸摸事件、打字速度和鼠標(biāo)移動。然后可以通過機(jī)器學(xué)習(xí) (ML) 模型分析這些細(xì)節(jié),以檢測交互是否與人類行為一致。
名聲
信譽(yù)信號僅在服務(wù)器端以不同的粒度級別(如 IP 地址或用戶會話)和時間窗口(如分鐘、小時、天或月)計算。有了信譽(yù)信號,檢測引擎可以使用先驗知識來調(diào)整決策。例如,如果某個自治系統(tǒng)經(jīng)常與數(shù)據(jù)抓取相關(guān)聯(lián),ML 模型將決定更積極地阻止來自該系統(tǒng)的流量。
由于抓取工具需要擴(kuò)大攻擊規(guī)模才能抓取數(shù)千或數(shù)百萬頁,因此他們往往嚴(yán)重依賴代理。最先進(jìn)的爬蟲使用住宅代理來訪問類似于人類用戶的 IP 地址。這就是為什么能夠檢測代理以阻止爬蟲很重要的原因。
簽名
簽名信號在服務(wù)器端和客戶端都被收集,可以包括:
- HTTP 指紋:HTTP 標(biāo)頭的詳細(xì)信息(服務(wù)器端)。
- TLS 指紋:在 TLS 握手(服務(wù)器端)期間提取的元數(shù)據(jù)。
- 瀏覽器指紋:JavaScript (JS) 收集有關(guān)操作系統(tǒng) (OS)、瀏覽器和設(shè)備(客戶端,在瀏覽器中)的信息。
- 移動指紋:SDK 收集有關(guān)操作系統(tǒng)和設(shè)備(客戶端,在移動應(yīng)用程序中)的信息。
最徹底的檢測將始終利用瀏覽器和移動指紋,因為使用 JS 或 SDK 制作的高級解決方案可以檢測流行的無頭瀏覽器和自動化框架,如無頭 Chrome、Puppeteer、Playwright和Selenium。
客戶端挑戰(zhàn)還可以幫助檢測和跟蹤旨在繞過傳統(tǒng)機(jī)器人檢測技術(shù)的爬蟲經(jīng)常使用的修改后的機(jī)器人框架,尤其是:
- 傀儡師額外隱身
- 修改后的 Selenium ChromeDriver
- 修改編劇
關(guān)于抓取檢測和保護(hù)的問題和誤解
大多數(shù)網(wǎng)站和移動應(yīng)用程序都實施了針對爬蟲的反制措施,其中包括驗證碼、速率限制、Web 應(yīng)用程序防火墻 (WAF) 等。但一些常見的反制措施不足以保護(hù)您的網(wǎng)站免受復(fù)雜的爬蟲攻擊——更糟糕的是,其中一些可能會產(chǎn)生誤報。
傳統(tǒng)的 CAPTCHA 是否足以對抗爬蟲?
不會。大多數(shù)爬蟲可以偽造傳統(tǒng)的驗證碼,使用基于人工智能的圖像或音頻識別或驗證碼農(nóng)場,人類工人代表機(jī)器人解決驗證碼挑戰(zhàn)。最重要的是,向用戶顯示驗證碼(也稱為“誤報”)會顯著降低真實用戶的用戶體驗。
在我的網(wǎng)站和 API 端點(diǎn)上使用基于 IP 的速率限制可以確保我的安全嗎?
雖然基于 IP 的速率限制可以阻止最簡單的機(jī)器人程序(僅從一個或幾個 IP 運(yùn)行的機(jī)器人程序),但它無法捕捉到最復(fù)雜的爬蟲程序。復(fù)雜的爬蟲利用代理將他們的攻擊分布到數(shù)千個不同的 IP 地址。因此,每個 IP 地址僅發(fā)出少量請求,這使攻擊者能夠保持在速率限制閾值以下。
此外,阻止整個 IP 地址是危險的,因為許多 IP 地址被大量共享。事實上,大多數(shù)移動 IP 地址在任何給定時間都由成百上千的用戶共享。因此,阻止 IP 會導(dǎo)致許多誤報(挑戰(zhàn)真正的人類用戶),從而損害您的用戶體驗并使您的消費(fèi)者感到沮喪。
阻止來自數(shù)據(jù)中心 IP 的所有流量是否足以阻止爬蟲?
不幸的是,阻止所有數(shù)據(jù)中心 IP 流量是不夠的,更糟糕??的是,它會觸發(fā)誤報。許多合法流量來自數(shù)據(jù)中心 IP,包括 VPN 用戶和大公司代理。您不想阻止您的合法用戶。最重要的是,攻擊者可以訪問數(shù)百萬個住宅代理——而不僅僅是數(shù)據(jù)中心代理。一些代理服務(wù)以每 GB 帶寬幾美元的價格提供對住宅 IP 的訪問。因此,攻擊者可以使用屬于 Comcast、AT&T 和 Verizon 等知名互聯(lián)網(wǎng)服務(wù)提供商 (ISP) 的 IP ,就像您的真實用戶一樣。
如果我使用地理封鎖來阻止來自我的業(yè)務(wù)未開展業(yè)務(wù)的國家/地區(qū)的所有流量,爬蟲能否繞過它?雖然地理封鎖可能會阻止從單個 IP 或外國數(shù)據(jù)中心代理運(yùn)行的簡單爬蟲,但它不會阻止利用住宅代理的更復(fù)雜的攻擊者。住宅代理網(wǎng)絡(luò)允許欺詐者選擇位于特定國家/地區(qū)的代理。
我們在觀察到的是,大多數(shù)攻擊者選擇與他們所針對的網(wǎng)站位于同一國家/地區(qū)的代理——這有助于他們顯得更人性化并繞過地理封鎖技術(shù)。
地理封鎖也會產(chǎn)生誤報,因為您的一些用戶可能正在國外旅行或暫時居住。此外,請記住 IP 地址位置并非 100% 準(zhǔn)確。因此,IP 位置數(shù)據(jù)庫中可能存在一些國家/地區(qū)錯誤分類,地理封鎖可能會在這些 IP 上產(chǎn)生誤報。
我的 WAF 可以防止抓取嗎?
不,不完全是。WAF 無法與當(dāng)今復(fù)雜的爬蟲機(jī)器人相提并論,因為 WAF 旨在使用一組二進(jìn)制規(guī)則檢測和過濾惡意流量。盡管昨天的簡單機(jī)器人程序和已知威脅可能會受到 WAF 中指定規(guī)則的約束,但爬蟲現(xiàn)在可以輕松訪問使用代理和 ML 來模仿人類行為的復(fù)雜機(jī)器人程序。今天復(fù)雜的爬蟲可以輕松繞過基于規(guī)則的安全工具,如 WAF。






