从用户代理检测bot的最佳方法?

时间:2010-11-05 14:03:00

标签: php search

时间流逝,但仍然没有完美的解决方案...... 看看是否有人有一个明智的想法来区分机器人和人力加载的网页? 现有技术仍在加载一长串众所周知的SE机器人并解析用户代理?

必须在加载页面之前进行测试!没有GIF或验证码!

9 个答案:

答案 0 :(得分:4)

如果可能的话,我会尝试honeypot这个方法。它对大多数用户来说是不可见的,并且会阻止很多机器人,尽管没有一个机器人可以工作,因为他们可以为你的网站实现特殊代码,一旦他们弄清楚你的游戏就跳过了蜜罐字段。但是机器人的主人需要更多关注,而不是大多数人都值得。将有大量其他网站接受垃圾邮件,而无需他们做任何额外的努力。

有一件事不时被忽略,让机器人认为一切正常,没有错误消息或拒绝页面是重要的,只需重新加载页面,就像对任何其他用户一样,除了跳过添加机器人的内容到网站。通过这种方式,机器人日志中没有可以拾取的红色标记,并且由所有者采取行动,需要更多的仔细检查才能确定您是否放弃了这些评论。

答案 1 :(得分:3)

没有挑战(如CAPTCHA),你只是在黑暗中拍摄。用户代理可以简单地设置为任意字符串。

答案 2 :(得分:1)

用户代理由客户端设置,因此可以进行操作。因此,恶意机器人肯定不会向您发送I-Am-MalBot用户代理,而是称自己为某个版本的IE。因此,使用用户代理来防止垃圾邮件或类似内容是毫无意义的。

那么,你想做什么?你的最终目标是什么?如果我们知道这一点,我们可以提供更好的帮助。

答案 3 :(得分:1)

SO的创建者应该知道为什么他们使用Captcha以防止机器人编辑内容。原因是实际上没有办法确定客户端不是机器人。而且我认为永远不会有。

答案 4 :(得分:1)

我自己正在为不同目的编写网页抓取工具。我使用Web浏览器UserAgent。

据我所知,如果机器人使用合法的UserAgent,你无法区分机器人和人类。像:

Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Chrome/9.0.570.1 Safari/534.11

我唯一能想到的是JavaScript。大多数自定义网络机器人(如我编码的机器人)无法执行javascript代码,因为它是一个浏览器工作。但是如果僵尸程序是链接的或者使用网络浏览器(比如firefox)那么它将被检测不到。

答案 5 :(得分:1)

其他人所说的在某种程度上是正确的......如果机器人制造商希望你认为机器人是真正的用户,那么就没有办法避免这种情况。但是许多流行的搜索引擎确实能够识别自己。这里有一个列表(http://www.jafsoft.com/searchengines/webbots.html)和其他地方。您可以将它们加载到数据库中并在那里搜索它们。我似乎记得,这违反了谷歌的用户协议,为他们的机器人制作自定义页面。

答案 6 :(得分:0)

我确定我会对此投票,但我必须发布: Constructive

在任何情况下,验证码都是目前防止僵尸程序的最佳方式,而不是批准所有用户提交的内容。

- 编辑 -

我刚注意到你的P.S.,而且我不确定无论如何在没有与之交互的情况下诊断机器人。在这种情况下,你最好的选择可能是尽早抓住机器人并实施1个月的IP限制,之后如果你经常将HTTP 404返回给它,BOT应该放弃。 Bot通常是从服务器运行而不是改变它们的IP,所以这应该是一种平庸的方法。

答案 7 :(得分:0)

我建议使用Akismet,一个垃圾邮件防护插件,而不是任何类型的Captcha或CSS技巧,因为它非常适合捕获垃圾邮件而不会破坏用户体验。

答案 8 :(得分:0)

诚实的机器人,例如搜索引擎,通常会访问您的robots.txt。从那里你可以学习他们的useragent字符串并将其添加到你的机器人列表。

显然,这对假装是人类的恶意机器人没有帮助,但对于某些应用程序而言,如果您只想从日志中过滤搜索引擎机器人(例如),这可能就足够了。