这是阻止我在日志中找到的用户代理的正确方法吗?

时间:2014-04-04 19:34:58

标签: apache .htaccess security mod-rewrite block

我想阻止我在服务器日志中看到的几个代理, 他们在日志中的确切名称是,例如:

Python-urllib/2.6

Python-urllib/2.7

CATExplorador/1.0beta (sistemes at domini dot cat; http://domini.cat/catexplorador.html)

我见过this example,但不知道如何实现它, 应该是它们出现的那样:

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^Python-urllib/2.6 [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Python-urllib/2.7 [OR] 
RewriteCond %{HTTP_USER_AGENT} ^CATExplorador/1.0beta (sistemes at domini dot cat; http://domini.cat/catexplorador.html) [OR] 
RewriteRule ^.* - [F,L]

或者这也很好:

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^python [OR] 
RewriteCond %{HTTP_USER_AGENT} ^catexplorador [OR] 
RewriteRule ^.* - [F,L]

问题例如:

  1. 如果我想阻止这个" python"的所有版本(或所有代理人 包含该字符串),第二个代码是否有效?

  2. 名称区分大小写? (catexplorador vs CATExplorador vs CaTExplorador)

  3. 这些是正确的旗帜吗?

  4. 如何阻止"空白"用户代理? (推荐吗?)

2 个答案:

答案 0 :(得分:2)

要阻止所有以python OR catexplorador开头并使其不区分大小写的代理,您可以使用:

RewriteEngine On 

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_USER_AGENT} ^(python|catexplorador) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^.* - [F,L]

答案 1 :(得分:0)

阻止特定用户代理的一个选项是使用此tutorial

BrowserMatchNoCase python bad_bot
BrowserMatchNoCase catexplorador bad_bot
Order Deny,Allow
Deny from env=bad_bot

BrowserMatchNoCase允许对用户代理进行不区分大小写的匹配。

第二种选择是使用SetEnvIfNoCase命令

SetEnvIfNoCase Referer "^$" bad_user
SetEnvIfNoCase User-Agent "python" bad_user
SetEnvIfNoCase User-Agent "catexplorador" bad_user
SetEnvIfNoCase User-Agent "^$" bad_user
Order Deny,Allow
Deny from env=bad_bot

此示例阻止空引荐(警告!未推荐)以及包含pythoncatexplorador的用户代理。您不希望阻止空引用,因为浏览器可以自动删除它们。它还使用最后一行阻止空用户代理。浏览器也可以自动执行此操作,具体取决于它们的配置方式。

附注:用户代理可以随意欺骗和更改,如果用户更改其用户代理,则无法保证阻止任何内容。

The BrowserMatch is a special cases of the SetEnvIf directive that sets environment variables conditional on the User-Agent HTTP request header. BrowserMatch只能检查用户代理,而SetEnvIf可以检查其他参数。