【问题标题】:Is this the right way to block user-agents I find on my logs?这是阻止我在日志中找到的用户代理的正确方法吗?
【发布时间】:2014-05-17 06:53:29
【问题描述】:

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

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. 如何阻止“空白”用户代理? (推荐吗?)

【问题讨论】:

    标签: apache .htaccess security mod-rewrite block


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,不过。使用第一个 Code Pattern 的动机是什么?例如,here,他为什么不使用你的模式?湾。他还得到了Bot\ mailto:craftbot@yahoo.com - 你的方法会如何阻止它(我担心(bot| 也会阻止googlebot)? C。 (pytho| 是否包含 python 并且也会阻止它?
    • a) 使用正则表达式支持比编写这么多单独的 RewriteCond 行更好。 b) 对于阻塞,您可以写:RewriteCond %{HTTP_USER_AGENT} ^(python|catexplorador|Bot\ mailto:craftbot@yahoo\.com) [NC] c) 是的。
    • 一个。代码中是否有任何内容表示“通配符”,这意味着ab| 会阻止abcabjjjd?我试图理解其中的逻辑。湾。 “正则表达式”是您的 | 方法吗? C。您如何看待暗示一些不同规则的第二个答案?谢谢!
    • a) 在正则表达式中 ^ab 表示匹配任何以 ab 开头的字符串,因此它匹配 abcabc123 等 b) 是 | 在正则表达式中表示 OR c) 是的是一种替代方案,但我更喜欢 mod_rewrite 规则,因为它更强大且功能更丰富。
    • 谢谢!我将如何阻止“空白”代理?你推荐它吗? (他们似乎总是在我的日志中使用黑客工具)
    【解决方案2】:

    阻止特定用户代理的一个选项是使用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可以查看其他参数。

    【讨论】:

    • 谢谢,但我有点困惑,你能解释一下 BrowserMatch Vs。 SetEnvIF 对比重写条件?什么是最佳做法,为什么? (我不想屏蔽空白推荐人,但相信最好屏蔽空白代理)
    • 从我的回答中的link来看,The BrowserMatch is a special cases of the SetEnvIf directive that sets environment variables conditional on the User-Agent HTTP request header.BrowserMatch只能检查用户代理,而SetEnvIf可以检查其他参数。
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2013-07-20
    • 2018-02-25
    • 1970-01-01
    • 2018-09-25
    • 2018-05-06
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多