我无法阻止两个糟糕的机器人继续从我的网站吸收带宽,而且我确定它与他们使用的用户代理名称中的*有关。
现在,我正在使用以下代码阻止坏机器人(这是摘录)......
# 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]
时,我收到错误。
猜猜有一种非常简单的方法可以做到这一点,我还没有找到谷歌。
答案 0 :(得分:1)
正则表达式模式中的星号(*)需要进行转义,因为它被解释为正则表达式的一部分。
RewriteCond %{HTTP_USER_AGENT} ^\*bot$
应该做的。
答案 1 :(得分:0)
我认为你错过了一个点.
,将你的状况改为:
RewriteCond %{HTTP_USER_AGENT} ^.*bot$ [OR]
答案 2 :(得分:0)
但这怎么会阻止Bad Bot访问呢?
我为一家安全公司(也是Botopedia.org的PM)工作,我可以说99.9%的坏机器人不会在其用户代理字符串中使用任何这些表达式。
大部分时间Bad Bots会使用看似合法的用户代理(冒充浏览器和像botbot这样的VIP机器人)而你根本无法通过用户代理数据过滤它们。
对于有效的机器人检测,您应该查看其他标志,如:
1)可疑签名(即标题顺序参数)
或/和
2)可疑行为(即早期robots.txt访问或请求率/模式)
然后你应该使用不同的挑战(即JS或Cookie甚至CAPTCHA)来验证你的怀疑。
您所描述的问题通常被称为“寄生阻力”。
这是一个非常现实和严重的问题,我们实际上仅在几个月前发表了一篇关于它的研究。
(我们发现在平均大小的网站上,51%的访问者将是机器人,31%是恶意的)
老实说,我不认为你能用几行RegEx来解决这个问题。
我们免费提供Bot过滤服务,还有其他几个像我们一样。 (如果需要,我可以认可好的服务)
GL