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

Apache 这是阻止我在日志中找到的用户代理的正确方法吗?,apache,.htaccess,security,mod-rewrite,block,Apache,.htaccess,Security,Mod Rewrite,Block,我想阻止我在服务器日志中看到的几个代理, 他们在日志中的确切姓名是,例如: pythonurllib/2.6 pythonurllib/2.7 CATExplorador/1.0beta(domini dot cat的系统;http://domini.cat/catexplorador.html) 我见过,但不知道如何实施, 如果它完全像它们出现的那样: RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^Python-urllib/2.6 [OR

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

pythonurllib/2.6

pythonurllib/2.7

CATExplorador/1.0beta(domini dot cat的系统;http://domini.cat/catexplorador.html)

我见过,但不知道如何实施, 如果它完全像它们出现的那样:

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]
问题,例如:

  • 如果我想阻止此“python”(或所有代理)的所有版本 包含该字符串),第二个代码可以工作吗

  • 名称是否区分大小写?(catexplorador vs catexplorador vs catexplorador)

  • 这些是正确的旗帜吗

  • 如何阻止“空白”用户代理?(是否推荐?)


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

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

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

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

    第二个选项是使用命令

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

    旁注:用户代理可以被欺骗并随意更改,如果用户更改其用户代理,则这不能保证阻止任何操作


    BrowserMatch是setenif指令的一个特例,它根据用户代理HTTP请求头设置环境变量。
    BrowserMatch只能检查用户代理,而
    setenif
    可以检查其他参数。

    谢谢。使用第一个代码模式的动机是什么?e、 g,他为什么不使用你的模式?B他还获得了
    Bot\mailto:craftbot@yahoo.com
    -你的方法会如何阻止它(恐怕
    (bot
    也会阻止googlebot)?c.是否
    (pytho
    包括
    python
    ,也会阻止它?a)使用regex支持比编写这么多单独的
    RewriteCond
    行要好。b)对于可以编写的阻塞:
    RewriteCond%{HTTP_USER_AGENT}^(python | catexplorador | Bot\mailto:craftbot@yahoo\是的,会的。代码中是否有表示“通配符”的内容,即
    ab |
    将阻止
    abc
    abjjjd
    ?我在试着理解逻辑。B“regex”是您的
    |
    方法吗?C第二个答案提出了一些不同的规则,你怎么看?谢谢a) 在正则表达式中,
    ^ab
    表示匹配任何以
    ab
    开头的字符串,因此它匹配
    abc
    abc123
    等。b)是的
    表示或在正则表达式中c)是的,这是一种替代方法,但我更喜欢
    mod_rewrite
    规则,因为它更强大,功能更丰富。谢谢!我该如何阻止一个“空白”特工?你推荐它吗?(它们似乎总是我日志上的黑客工具)谢谢,但我有点困惑,你能解释一下BrowserMatch Vs.SetEnvIF Vs.RewriteCond吗?最佳实践是什么?为什么?(我不想阻止空白引用,但确实认为最好阻止空白代理)在我的回答中,
    BrowserMatch是setenif指令的一个特例,它根据用户代理HTTP请求头设置环境变量。
    BrowserMatch
    只能检查用户代理,而
    setenif
    可以检查其他参数。
    BrowserMatchNoCase python bad_bot
    BrowserMatchNoCase catexplorador bad_bot
    Order Deny,Allow
    Deny from env=bad_bot
    
    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