2015-05-05 24 views
0

UPDATE 我發現Firefox插件:User Agent Switcher,它允許我使用不同的用戶代理進行測試。驚喜,它阻止了用戶代理,因爲它應該。我想知道爲什麼通過.htaccess我的第一次嘗試嘗試後發生的12個左右的請求以某種方式滑入。請求頁面是否已在處理中?哦,至少他們在工作。.htaccess不阻止指定的用戶代理


在我.htaccess我有一個PHP腳本,檢查問題的用戶代理字符串和動態寫入.htaccess一個RewriteCond立即阻止用戶代理。

我試圖通過編寫以下條件RewriteCond %{HTTP_USER_AGENT} ^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$ [NC]來阻止代理Mozilla/5.0 (Auto Shell Spider),但是我的日誌顯示用戶代理繼續訪問頁面(在接下來的2秒內另一個10+)。我用preg_match()測試了規則,它匹配,因此應該阻止用戶代理。發生什麼事? 我的印象是,我不需要RewriteCond中的AND,因爲每個都有自己的RewriteRule。我不相信有緩存.htaccess - 更改應立即生效。 PHP正則表達式與htaccess不同嗎?

任何幫助,將不勝感激。

這裏是一個更完整的.htaccess說明:

RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php 

# Block spiders: 
    RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|360Spider|Sogou|Sosospider|Yandex|NaverBot|Yeti|moget|ichiro|RedBot|AhrefsBot|xovibot).*$ [NC] 
    RewriteRule .* - [R=403,L] 
Deny from 59.61.184.100 
Deny from 59.152.240.71 

# Block User Agent - NOT WORKING? 
RewriteCond %{HTTP_USER_AGENT} ^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$ [NC] 
RewriteRule .* - [R=403,L] 

當使用PHP的preg_match,

$text = "Mozilla/5.0 (Auto Shell Spider)"; 
preg_match('`^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$`', $text, $acell);  
echo "<pre>";var_dump($acell);echo "</pre>";  

我得到一個匹配如下:

array (size=2) 
    0 => string 'Mozilla/5.0 (Auto Shell Spider)' (length=31) 
    1 => string 'Mozilla/5.0 (Auto Shell Spider)' (length=31) 

回答

0

嘗試重新安排你的像這樣的規則:

Deny from 59.61.184.100 
Deny from 59.152.240.71 

RewriteEngine On 

# Block spiders: 
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|360Spider|Sogou|Sosospider|Yandex|NaverBot|Yeti|moget|ichiro|RedBot|AhrefsBot|xovibot).*$ [NC] 
RewriteRule^- [R=403,L] 

# Block User Agent - NOT WORKING? 
RewriteCond %{HTTP_USER_AGENT} "Mozilla/5\.0 \(Auto Shell Spider\)" [NC] 
RewriteRule^- [R=403,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^index.php [L] 
+0

你能解釋一下爲什麼會有這樣的結果嗎?每次發現新的攻擊者時,我的腳本都會附加新的RewriteRule。將新規則插入到.htaccess的中間會更加複雜,而且很難調試以查看更改是否有效。在完成額外的工作之前,理解原稿不起作用會有所幫助。我知道.htaccess按順序處理命令,但我不明白當前順序會如何衝突。謝謝。 – mseifert

+0

我發現Firefox插件:User Agent Switcher,它允許我使用不同的用戶代理進行測試。驚喜,它阻止了用戶代理,因爲它應該。我想知道爲什麼在我的第一次嘗試之後發生的12次左右的請求以某種方式滑入。緩存?時機(請求已在處理中)?無論如何,無論如何,我會用你的回答作爲好建議。謝謝。 – mseifert

+0

除非您在前面或其他CMS框架中使用某個代理,否則htaccess不會被緩存。在.htaccess中進行的任何更改都會立即生效,但瀏覽器有時也可以緩存結果。 – anubhava