1

我无法阻止两个不断从我的站点吸走带宽的坏机器人,我确信这与他们使用的用户代理名称中的 * 有关。

现在,我正在使用以下代码来阻止坏机器人(这是摘录)......

# 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]出现错误时。

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

4

3 回答 3

1

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

于 2012-10-30T10:56:33.253 回答
0

我认为您缺少一个点.,将您的条件更改为:

RewriteCond %{HTTP_USER_AGENT} ^.*bot$ [OR]
于 2012-10-30T11:05:01.020 回答
0

但这将如何防止 Bad Bot 访问?

我在一家安全公司工作(也是Botopedia.org的 PM ),我可以看出 99.9% 的恶意机器人不会在其用户代理字符串中使用任何这些表达式。

大多数情况下,Bad Bots 会使用看起来合法的用户代理(模拟浏览器和 VIP 机器人,如 Googlebot),您根本无法仅通过用户代理数据过滤它们。

要进行有效的机器人检测,您应该查看其他迹象,例如:

1)可疑签名(即Order of Header参数)

或/和

2) 可疑行为(即早期 robots.txt 访问或请求率/模式)

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

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

这是一个非常真实和严肃的问题,我们实际上在几个月前发表了一项关于它的研究。

(我们发现在平均规模的网站上,51% 的访问者是机器人,31% 是恶意的)

老实说,我不认为你可以用几行 RegEx 来解决这个问题。

我们免费提供我们的 Bot 过滤服务,还有其他几个像我们一样。(如果需要,我可以认可良好的服务)

总帐。

于 2012-10-30T14:06:30.010 回答