apache mod_rewrite具有特殊字符问题的http_user_agent

时间:2012-05-10 06:51:24

标签: regex apache .htaccess mod-rewrite

我遇到了垃圾邮件机器人/抓取工具来到我的网站的问题,其中的请求在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中最重要的执行子句(为了增加安全性而引入其他人)。

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

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

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