2012-10-30 189 views
1

我無法阻止兩個不良的機器人,從我的網站吸持帶寬,我敢肯定它與*在用戶代理名稱,他們使用。htaccess塊*機器人和機器人*

現在,我使用下面的代碼來阻止壞的機器人(這是一個節選)......

# block bad bots 
RewriteCond %{HTTP_USER_AGENT} ^$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^spider$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^robot$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^crawl$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^discovery$ 
RewriteRule .* - [F,L] 

當我嘗試做RewriteCond %{HTTP_USER_AGENT} ^*bot$ [OR]RewriteCond %{HTTP_USER_AGENT} ^(*bot)$ [OR]我得到一個錯誤。

猜測有一個非常簡單的方法來做到這一點,我只是還沒有找到在谷歌。

回答

1

正則表達式模式中的星號(*)需要轉義,因爲它被解釋爲正則表達式的一部分。
RewriteCond %{HTTP_USER_AGENT} ^\*bot$
應該做的伎倆。

+0

這就是我想的事情之一,它的炸彈了。 – Rmilligan2372

+0

Doh - 我沒有正確預覽。我的反斜槓沒有顯示出來,需要轉義。諷刺的,呃。 –

+0

是的,這正是我所需要的 – Rmilligan2372

0

我認爲你缺少點.,你的條件改成這樣:

RewriteCond %{HTTP_USER_AGENT} ^.*bot$ [OR] 
+0

這是炸彈... – Rmilligan2372

+0

你的意思是它造成了Apache 500?你能告訴我他在登錄中寫了什麼錯誤嗎? – anubhava

+0

我添加了反斜槓\而不是a。現在它正在工作。 – Rmilligan2372

0

但是,這是怎麼回事,防止壞博特訪問?

我爲一家安全公司工作(同時也是PM的Botopedia.org),我可以說99.9%的壞機器人不會在他們的用戶代理字符串中使用任何這些表達式。

大多數時候Bad Bots都會使用合法的用戶代理(冒充瀏覽器和VIP機器人,如Googlebot),並且您無法單獨通過用戶代理數據對其進行過濾。

爲了有效機器人檢測你應該考慮像其他體徵:

1)可疑簽名(即頭參數的順序)

或/和

2)可疑行爲(即早期的機器人.txt訪問或請求速率/模式)

然後,您應該使用不同的挑戰(即JS或Cookie,甚至CAPTCHA)來驗證您的懷疑。

你所描述的問題通常被稱爲「寄生阻力」。

這是一個非常真實和嚴重的問題,我們實際上在幾個月前就發佈了一項研究。

(我們發現,平均大小的網站訪問者的51%將是機器人,31%的惡意)

老實說,我不認爲你可以用正則表達式的幾行解決了這個問題。

我們免費提供我們博特過濾服務,並有幾個人跟我們一樣。 (如果需要,我可以贊同良好的服務)

GL。

+0

這也許有幫助: http://security.stackexchange.com/questions/17096/how-can-i-identify-that-my-page-is-requested-by-robot-but-not-users-瀏覽器/ 17365#17365 –

+3

爲安全公司工作的榮譽,但您的公司不知道什麼壞機器人正在擊中我的網站以及那些機器人正在使用哪些用戶代理字符串。欣賞你在這裏的努力,但你的迴應與解決我的問題沒有任何關係,似乎更像是一個垃圾郵件銷售點,而不是試圖幫助我解決我需要的問題。 – Rmilligan2372