【问题标题】:apache mod_rewrite http_user_agent with special character issues具有特殊字符问题的 apache mod_rewrite http_user_agent
【发布时间】:2012-05-18 17:16:25
【问题描述】:

我遇到了垃圾邮件机器人/爬虫进入我的网站的问题,其请求在 apache 日志中显示如下:

"GET / HTTP/1.1" 200 7128 "-" "\x09Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"

这些请求的奇怪区别在于,由于某种原因,用户代理前面有一个选项卡 (\x09),所以我尝试为这些请求创建一个 .htaccess mod_rewrite 过滤器。

到目前为止,我未能成功创建适合拒绝这些请求的 RewriteCond。我尝试了以下方法:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^\x09Mozilla [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09).* [NC]
RewriteRule ^.* - [F,L]

%09(制表符)是第二个 RewriteCond 中最重要的操作子句(为了增加安全性而加入其他子句)。

我的语法错误在哪里?如何阻止这些请求?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    好的,最终使用以下内容,似乎正在以 403 错误阻止机器人:

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} Mozilla/5\.0.*Windows\ NT\ 5\.1;\ rv:5\.0.*Gecko/20100101\ Firefox/5\.0 [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09|\t|\x09).* [NC]
    RewriteRule ^.* - [F,L]
    

    【讨论】:

      【解决方案2】:

      问题是当你输入 \x09 时,这不是一个特殊字符——它是字符 \、x、0 和 9。如果你想要一个制表符,请尝试使用 \t 代替——这是制表符的正则表达式版本。所以 RewriteCond 应该是这样的:

      RewriteCond %{HTTP_USER_AGENT} ^\tMozilla [NC,OR]
      

      【讨论】:

      • 这对于停止请求也无效。即使按照您的建议更改了 .htaccess 后,我仍然在 Apache 日志中看到对 HTTP 200 的上述请求感到满意
      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多