程序化Bot检测

时间:2008-12-04 19:03:08

标签: bots

我需要编写一些代码来分析我们网站上的给定用户是否是机器人。如果它是机器人,我们将采取一些具体行动。除了友好的机器人之外,查看用户代理并不是什么成功,因为您可以在机器人中指定您想要的任何用户代理。我是在不友好机器人的行为之后。我到目前为止的各种想法是:

  • 如果您没有浏览器ID
  • 如果您没有会话ID
  • 无法写一个cookie

显然,在某些情况下,合法用户看起来像机器人,但没关系。是否有其他编程方法来检测机器人,或者检测看起来像机器人的东西?

9 个答案:

答案 0 :(得分:8)

说明您要排除机器人的原因,以及您对误分类的容忍程度。

也就是说,你是否必须以牺牲机器人这样的真实用户为代价来排除每一个机器人?或者,如果机器人抓取您的网站,只要它们没有性能影响,它是否可以?

排除所有机器人的唯一方法是关闭您的网站。恶意用户可以将他们的僵尸程序分发到足以让您无法将其流量与真实用户区分开的机器上。像JavaScript和CSS这样的技巧不会阻止坚定的攻击者。

如果“愉快的媒介”令人满意,可能有用的一个技巧是隐藏CSS链接,以便浏览器中的用户看不到它们,但仍然在HTML中。跟随其中一个“毒药”链接的任何代理都是机器人。

答案 1 :(得分:8)

用户代理可以伪造。 Captchas已被破解。可以通过页面请求将有效的cookie发送回您的服务器。合法程序(如Adobe Acrobat Pro)可以在一个会话中进入并下载您的网站。用户可以禁用JavaScript。由于没有标准的“正常”用户行为衡量标准,因此无法与机器人区分开来。

换句话说:不能将用户拉入某种形式的互动聊天,并希望他们通过图灵测试,然后再次,他们也可能是一个非常好的机器人。

答案 2 :(得分:3)

这是一个想法:

大多数机器人不会下载css,javascript和图片。他们只是解析html。

如果您可以在用户的​​会话中跟踪他们是否下载了以上所有内容,例如:通过记录尝试的脚本来路由所有下载请求,然后您可以快速识别仅下载原始html的用户(很少有普通用户会这样做)。

答案 3 :(得分:2)

你说可以将某些用户显示为机器人,因此,

大多数机器人都没有运行javascript。使用javascript执行Ajax,如调用服务器,将此IP地址标识为NonBot。存储一段时间,以确定此IP作为优质客户端的未来连接,并防止进一步浪费javascript调用。

答案 4 :(得分:2)

一个简单的测试是javascript:

<script type="text/javascript">
document.write('<img src="/not-a-bot.' + 'php" style="display: none;">');
</script>

not-a-bot.php可以在会话中添加一些内容来标记用户不是机器人,然后返回单个像素gif。

网址被分解以将其伪装成机器人。

答案 5 :(得分:1)

对于服务器上的每个会话,您可以确定用户是否在任何时候点击或键入太快。在给定次数的重复之后,将“isRobot”标志设置为true并保留该会话中的资源。通常情况下,您不会告诉用户他已被机器人检测到,因为在那种情况下他只是开始一个新的会话。

答案 6 :(得分:0)

嗯,这真的是针对网站的特定页面。我们不希望机器人提交表格b / c它搞砸跟踪。老实说,友好的机器人,谷歌,雅虎等不是一个问题,因为他们通常不会填写表格开头。如果我们怀疑某人是机器人,我们可能会向他们展示验证码图片或者类似的东西......如果他们通过了,那么他们就不是机器人而且表格会提交......

我听说过将表单放入flash或者提交javascript,但我不想阻止真正的用户使用该网站,直到我怀疑他们是一个机器人...

答案 7 :(得分:0)

我认为检查会话ID的想法已经非常有用了。

另一个想法:您可以检查是否也下载了嵌入式资源。

不加载图像(例如节省时间和带宽)的机器人应该与通常将加载嵌入页面的图像的浏览器区分开。

然而,这样的检查可能不适合作为实时检查,因为您必须分析某种可能耗费时间的服务器日志。

答案 8 :(得分:0)

嘿,谢谢所有的回复。我认为,一些建议的组合将很好地运作。主要是隐藏的表单元素,它可以计算填写表单的速度,以及可能的“毒性链接”概念。我认为它将覆盖大多数基础。当你谈论机器人时,你不会全部找到它们,所以没有必要考虑你会......傻机器人。