2012-10-30 144 views
1

我无法阻止两个不良的机器人,从我的网站吸持带宽,我敢肯定它与*在用户代理名称,他们使用。htaccess块*机器人和机器人*

现在,我使用下面的代码来阻止坏的机器人(这是一个节选)......

# block bad bots 
RewriteCond %{HTTP_USER_AGENT} ^$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^spider$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^robot$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^crawl$ [OR] 
RewriteCond %{HTTP_USER_AGENT} ^discovery$ 
RewriteRule .* - [F,L] 

当我尝试做RewriteCond %{HTTP_USER_AGENT} ^*bot$ [OR]RewriteCond %{HTTP_USER_AGENT} ^(*bot)$ [OR]我得到一个错误。

猜测有一个非常简单的方法来做到这一点,我只是还没有找到在谷歌。

回答

1

正则表达式模式中的星号(*)需要转义,因为它被解释为正则表达式的一部分。
RewriteCond %{HTTP_USER_AGENT} ^\*bot$
应该做的伎俩。

+0

这就是我想的事情之一,它的炸弹了。 – Rmilligan2372

+0

Doh - 我没有正确预览。我的反斜杠没有显示出来,需要转义。讽刺的,呃。 –

+0

是的,这正是我所需要的 – Rmilligan2372

0

我认为你缺少点.,你的条件改成这样:

RewriteCond %{HTTP_USER_AGENT} ^.*bot$ [OR] 
+0

这是炸弹... – Rmilligan2372

+0

你的意思是它造成了Apache 500?你能告诉我他在登录中写了什么错误吗? – anubhava

+0

我添加了反斜杠\而不是a。现在它正在工作。 – Rmilligan2372

0

但是,这是怎么回事,防止坏博特访问?

我为一家安全公司工作(同时也是PM的Botopedia.org),我可以说99.9%的坏机器人不会在他们的用户代理字符串中使用任何这些表达式。

大多数时候Bad Bots都会使用合法的用户代理(冒充浏览器和VIP机器人,如Googlebot),并且您无法单独通过用户代理数据对其进行过滤。

为了有效机器人检测你应该考虑像其他体征:

1)可疑签名(即头参数的顺序)

或/和

2)可疑行为(即早期的机器人.txt访问或请求速率/模式)

然后,您应该使用不同的挑战(即JS或Cookie,甚至CAPTCHA)来验证您的怀疑。

你所描述的问题通常被称为“寄生阻力”。

这是一个非常真实和严重的问题,我们实际上在几个月前就发布了一项研究。

(我们发现,平均大小的网站访问者的51%将是机器人,31%的恶意)

老实说,我不认为你可以用正则表达式的几行解决了这个问题。

我们免费提供我们博特过滤服务,并有几个人跟我们一样。 (如果需要,我可以赞同良好的服务)

GL。

+0

这也许有帮助: http://security.stackexchange.com/questions/17096/how-can-i-identify-that-my-page-is-requested-by-robot-but-not-users-浏览器/ 17365#17365 –

+3

为安全公司工作的荣誉,但您的公司不知道什么坏机器人正在击中我的网站以及那些机器人正在使用哪些用户代理字符串。欣赏你在这里的努力,但你的回应与解决我的问题没有任何关系,似乎更像是一个垃圾邮件销售点,而不是试图帮助我解决我需要的问题。 – Rmilligan2372