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)
你能解釋一下爲什麼會有這樣的結果嗎?每次發現新的攻擊者時,我的腳本都會附加新的RewriteRule。將新規則插入到.htaccess的中間會更加複雜,而且很難調試以查看更改是否有效。在完成額外的工作之前,理解原稿不起作用會有所幫助。我知道.htaccess按順序處理命令,但我不明白當前順序會如何衝突。謝謝。 – mseifert
我發現Firefox插件:User Agent Switcher,它允許我使用不同的用戶代理進行測試。驚喜,它阻止了用戶代理,因爲它應該。我想知道爲什麼在我的第一次嘗試之後發生的12次左右的請求以某種方式滑入。緩存?時機(請求已在處理中)?無論如何,無論如何,我會用你的回答作爲好建議。謝謝。 – mseifert
除非您在前面或其他CMS框架中使用某個代理,否則htaccess不會被緩存。在.htaccess中進行的任何更改都會立即生效,但瀏覽器有時也可以緩存結果。 – anubhava