我在阻止两个不好的机器人时遇到了麻烦,这两个机器人不断地从我的网站上吸收带宽,我确信这与他们使用的用户代理名称中的*有关。
现在,我正在使用以下代码来阻止不好的机器人(这是一个摘录)……
# 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]时,我得到一个错误。
我猜有一种非常简单的方法可以做到这一点,但我在谷歌上还没有找到。
发布于 2012-10-30 18:56:33
正则表达式模式中的星号(*)需要转义,因为它被解释为正则表达式的一部分。
RewriteCond %{HTTP_USER_AGENT} ^\*bot$
应该能行得通。
发布于 2012-10-30 19:05:01
我认为您缺少一个点.,请将您的条件更改为:
RewriteCond %{HTTP_USER_AGENT} ^.*bot$ [OR]发布于 2012-10-30 22:06:30
但是这将如何防止Bad Bot访问呢?
我在一家安全公司工作(也是Botopedia.org的PM ),我可以断定99.9%的坏机器人不会在他们的用户代理字符串中使用任何这些表达式。
大多数时候,坏机器人会使用看起来合法的用户代理(模仿浏览器和像Googlebot这样的VIP机器人),你不能仅仅通过用户代理数据来过滤它们。
为了有效地检测机器人,你应该看看其他的标志,比如:
1)可疑签名(即Header参数顺序)
或/和
2)可疑行为(即早期robots.txt访问或请求率/模式)
然后,您应该使用不同的挑战(即JS或Cookie,甚至CAPTCHA)来验证您的怀疑。
您所描述的问题通常被称为“寄生阻力”。
这是一个非常真实和严重的问题,我们实际上在几个月前发表了一项关于它的研究。
(我们发现,在平均大小的网站上,51%的访问者将是机器人,31%是恶意的)
老实说,我不认为用几行RegEx就能解决这个问题。
我们免费提供我们的机器人过滤服务,还有其他几个像我们这样的。(如果需要,我可以支持好的服务)
总帐
https://stackoverflow.com/questions/13137311
复制相似问题