閱界資訊

第343期:如何阻止 AI 爬蟲

閱閱界編輯部2閱讀4分鐘

AI 大模型公司,正在瘋狂收集訓練數據。它們派出無數爬蟲,在互聯網上無節制地抓取數據。爬蟲數量之多、頻率之高,堪比 DDoS 攻擊。上週,代碼託管網站 SourceHut 的站長,公開發表文章(下圖),痛斥 AI 爬蟲太過份,服務器無法承受訪問壓力,中斷服務。他非常生氣,這些爬蟲根本不遵守 robots.txt 文件,Git 倉庫的每個頁面、每個鏈接、每個提交都要爬取。

它們來自全球數萬個 IP 地址,用戶代理(user-agent 字段)也是隨機的,僞裝得像真實用戶,難以有效攔截。最可氣的是,它們今天爬完了,過了六小時,又來爬同樣的內容!每一週,他要用20%~100%的工作時間,處理這些爬蟲造成的服務器壓力。SourceHut 已經中斷服務好幾次,對於一個 SaaS 工具,這是致命的。最後,他說不只他遇到這種事,整個行業都深受其害。

“我的系統管理員朋友,都在處理同樣的問題。每次我坐下來和他們喝啤酒或喫晚餐時,我們很快就會抱怨機器人。這些對話中的絕望是顯而易見的。”那麼,有什麼辦法,可以對付這些 AI 爬蟲?最簡單的方法,就是使用 Cloudflare 公司的免費防護,它的 CDN 可以幫你擋掉 AI 爬蟲。但是,有些企業級服務不適合使用 Cloudflare,這時你就必須自己來擋爬蟲。今天,向大家介紹一個專門對付爬蟲的工具 Anubis。

它是一個採用工作量證明的反向代理。所謂反向代理,就是目標網站的所有訪問請求,都會重定向給它。你首先要架設一個它的實例,然後把這個實例放在目標網站之前,當作反向代理(比如像下面設置)。```reverse_proxy Anubis 的頁面(下圖)。

這個頁面會在用戶的瀏覽器上,執行一段 JS 程序,進行大量的數學計算。直到計算答案正確,纔可以訪問目標網站。這個過程有時很耗時,可能需要1~2分鐘。(圖片說明:上圖的手機瀏覽器用了1分53秒,才計算完畢。)對於爬蟲來說,如果每個請求都要耗費大量計算,才能拿到數據,這會極大地消耗它的服務器資源,從而達到阻止爬蟲訪問的目的。當然,真實的訪問者也必須完成這樣一個計算,這非常影響使用體驗。但是,總比聽任爬蟲造成訪問中斷要好。

那麼,Anubis 到底讓爬蟲計算什麼?具體來說,就是下面這行代碼,計算一個哈希值。```const hash = await sha256(`${challenge}${nonce}`);```可以看到,它就是用 SHA256 算法,計算一個字符串的哈希值。

這個字符串由兩部分組成,第一部分`challenge`,由用戶的一些公開信息連接而成,包括用戶的 IP 地址、瀏覽器 user-agent 字段、當前日期、Anubis 的公鑰等。第二部分`nonce`,表示迭代次數,第一次計算就是1,第二次計算就是2,以此類推。Anubis 的默認設定是,計算出來的哈希值的前五位必須都爲0,否則 nonce 自動加1,再次進行計算,直到滿足要求爲止。

有時,可能需要計算幾百萬次,才能得到合格的哈希值。熟悉比特幣的同學,應該一眼看出來了,這就是比特幣的算法。比特幣是非常耗費算力的,所以 Anubis 也能很有效地消耗爬蟲的 CPU。當客戶端終於算出滿足要求的哈希值時(前五位爲0),就會把這時的 nonce 值傳給 Anubis 實例服務器,讓後者驗證哈希值是否正確。沒問題的話,Anubis 就會將客戶端重定向到目標網站,並在客戶端寫入一個 Cookie,以免後續請求再觸發工作量驗證。

這就是阻止爬蟲的整個過程,不知道說清楚了沒有,原理很簡單,實施也不難。事實證明,它很有效。一個站長說,兩個半小時內,他的網站總共收到了81000個請求,其中只有3%通過了 Anubis 的工作量證明,這意味着97%的流量可能都是機器人!這太瘋狂了,可見現在的 AI 爬蟲有多猖獗。如果你的網站也遇到了同樣問題,又沒法使用 Cloudflare,那可以試試 Anubis 的工作量證明。

來源|阮一峯科技愛好者週刊第 343 期,

每週精選周刊头条

評論(0)

暫無評論,來搶第一條。