2009-01-16 42 views
8

我想阻止自動從我們的網站抓取某個網站,同時不影響合法蜘蛛抓取(googlebot等)。有沒有已經存在的東西來實現這一目標?我甚至使用正確的術語?如何防止未經授權的蜘蛛抓取

編輯:我主要是爲了防止那些會惡意做這件事的人。即他們不會遵守robots.txt

編輯2:如何防止「使用率」的使用...即驗證碼,以繼續瀏覽如果自動檢測和流量不是來自合法(谷歌,雅虎,MSN等)IP。

回答

8

如果不是不可能完成,這很困難。許多「流氓」蜘蛛/爬蟲不會通過用戶代理字符串識別自己,因此很難識別它們。您可以嘗試通過其IP地址阻止它們,但很難跟上將新的IP地址添加到您的阻止列表。如果使用IP地址,則也可以阻止合法用戶,因爲代理使許多不同的客戶端顯示爲單個IP地址。

在這種情況下使用robots.txt的問題是,蜘蛛可以選擇忽略它。

編輯:速率限制是一種可能性,但它有一些識別(並跟蹤)「好」和「壞」用戶代理/ IP的相同問題。在我們編寫的一個內部頁面查看/會話計數系統中,我們根據頁面查看率排除了會話,但我們也不擔心會消除「好」蜘蛛,因爲我們不希望它們也計入數據。我們沒有做任何有關阻止任何客戶實際查看網頁的內容。

+1

如果蜘蛛是惡意的,robots.txt將無法完成工作。您需要通過IP或用戶代理字符串在防火牆處阻止它們,但不幸的是(如您所述),這可能很難跟上。 – 2009-01-16 03:19:49

+0

最好是創建一個HTML模塊來根據請求率,IP等來過濾掉惡意腳本。 – Todd 2009-01-16 03:21:12

+0

如果您使用HTTPModule,那麼您將面臨可能的DOS攻擊。 – 2009-01-16 03:38:42

1

robots.txt只有在蜘蛛承認它時纔有效。你可以創建一個HttpModule來過濾掉你不想爬取你的網站的蜘蛛。

0

你應該做好防火牆在檢測到惡意用途時所做的一切 - 讓他們繼續前進,但不要給他們任何東西。如果你開始投擲403或404,他們會知道有什麼不對。如果你返回隨機數據,他們會去做他們的業務。

雖然要檢測惡意使用,但可嘗試在搜索結果頁面(或其用作站點地圖的頁面)上添加陷阱鏈接,並用CSS隱藏它。需要檢查他們是否聲稱是一個有效的機器人,並讓他們通過。您可以存儲他們的IP以便將來使用並快速搜索。

6

一種方法是建立一個HTTP焦油坑;嵌入一​​個只有自動抓取工具才能看到的鏈接。這個鏈接應該放到一個填充了隨機文本和鏈接本身的頁面(但是附加頁面信息:/tarpit/foo.html,/tarpit/bar.html,/tarpit/baz.html - 但是腳本在/ tarpit /處理200結果的所有請求)。

爲了讓好人擺脫困境,如果用戶代理是谷歌或雅虎,可以生成302重定向到您的主頁。

這並不完美,但它至少會減慢幼稚。

編輯:正如Constantin所建議的那樣,您可以將tar標記標記爲robots.txt中的限制標記。好人使用遵守此協議的網絡蜘蛛將不在焦油坑中。這可能會擺脫爲已知的好人生成重定向的要求。

5

如果你想保護自己免受通用的爬蟲,使用蜜罐。

見,例如,http://www.sqlite.org/cvstrac/honeypot。好蜘蛛不會打開這個頁面,因爲網站的robots.txt明確地禁止它。人可能會打開它,但不應該點擊「我是蜘蛛」鏈接。壞蜘蛛肯定會遵循這兩個環節,所以會出賣它的真實身份。

如果您的網站專門創建的履帶,你可以(在理論上)創建一個移動的蜜罐。

1

我一般同意蜜罐方法。但是,我把僅用於蜜罐頁面/資源的鏈接放在了被「/robots.txt」阻止的頁面上 - 以及被此類阻止的蜜罐。這樣,惡意機器人必須違反「禁止」規則TWICE來禁止自己。一個典型的用戶手動跟蹤一個不可點擊的鏈接可能只做一次,並且可能找不到包含蜜罐URL的頁面。

蜜罐的資源記錄的惡意客戶端的惡意IP地址轉換成這是其他地方作爲IP禁止列表中的Web服務器配置的文件。這樣,一旦列出,Web服務器將阻止該客戶端IP地址的所有進一步訪問,直到列表被清除。其他人可能會有某種自動過期,但我相信只能從禁止列表中手動刪除。

題外話:我也做了同樣的事情,垃圾郵件和我的郵件服務器:這我發送垃圾郵件作爲他們的第一條消息的網站都發送任何進一步的消息,直到我清除日誌文件禁止。儘管我在應用程序級別實施了這些禁止列表,但我也有防火牆級別的動態禁止列表。我的郵件和網絡服務器也在他們之間共享禁止的IP信息。對於一個不成熟的垃圾郵件發送者,我認爲相同的IP地址可能同時承載惡意蜘蛛和垃圾郵件。當然,這是BotNet之前,但我從來沒有刪除它。