用于捕捉机器人的算法

时间:2012-01-18 23:05:54

标签: php webserver web-crawler bots

什么样的算法网站,包括stackexchange用于捕捉机器人? 是什么让他们有时失败并向普通用户提供人工验证? 对于在PHP上运行的网络应用程序和网站,你会建议什么才能阻止机器人和机器人攻击,甚至内容窃取?

谢谢。

2 个答案:

答案 0 :(得分:2)

查看http://www.captcha.net/以获取简单易用的人工验证工具。

防止内容窃取非常困难,因为您希望可以向访问者提供信息。

禁用右键点击,它只会骚扰您的用户,而不会以任何方式阻止内容窃贼。

你将无法阻挡所有僵尸程序,但你将能够实现每个停止机器人的一部分的安全层。

一些提示和提示;

  • 使用Captcha进行人工验证,但不要使用太多,因为它们会使用户疲惫不堪。
  • 您可以使用验证码进行电子邮件验证,并要求登录您的内容(如果它不会吓跑太多用户)。或者考虑免费提供部分内容,并要求注册完整内容。
  • 定期检查您在其他网站上的内容(通过Google,可能使用Google API自动执行)以及如果他们公然偷走(未引用!)您的内容,请提起诉讼/ DMCA通知。
  • 限制各个客户端向您的网站发出请求的速度。机器人会经常快速地刮擦。每秒多次请求内容已经为人类用户提供了很多帮助。有一些服务器工具可以实现这一点,例如。看看http://www.modsecurity.org/

我确信可以考虑更多的安全层,但直接想到这些。

答案 1 :(得分:1)

我跑过an interesting article from Princeton University,提出了自动机器人检测的好主意。这个想法很简单。人类的行为与机器不同,自动化访问通常与人类的行为不同。

本文介绍了一些可以在几个请求过程中完成的基本检查。您花了一些请求收集有关客户端浏览方式的信息,并在一段时间后获取所有变量并进行断言。要包括的事项是:

  • 鼠标移动:机器人很可能不会使用鼠标,因此不会在浏览器中生成鼠标移动事件。你可以准备一个javascript函数,比如" onBodyMouseMove()"只要鼠标移动到页面整个区域,就会调用它。如果调用此函数,则在会话计数器中计数+1。

  • Javascript:一些机器人不会花时间运行javascript(即curl,wget,axel和其他命令行工具),因为它们主要发送返回有用输出的特定请求。您可以准备在加载页面后调用的函数,并在会话计数器中计数+1。

  • Invisble links:爬虫机器人正在吸吮不关心网站内容的机器。它们旨在单击所有可能的链接并将所有内容吸入镜像位置。您可以在网页的某个位置插入不可见的链接 - 例如,几个页面底部的空格字符由锚标记包围。人类永远不会看到这个链接,但你会得到一个请求,在会话计数器中计算+1。

  • CSS,图像和其他可视组件:机器人很可能会忽略CSS和图像,因为他们对渲染网页不感兴趣。您可以隐藏以* .css或* .jpg结尾的URL内的链接(您可以使用Apache的重写或servlet映射)。如果访问这些特定链接,则很可能是浏览器加载CSS和JPG以供查看。

注意:* .css,*。js,* .jpg等通常在会话中每页加载一次。您需要在末尾附加一个唯一的计数器,以便浏览器在每次请求页面时重新加载这些链接。

一旦您在几个请求过程中收集了会话中的所有信息,您就可以进行断言。例如,如果您没有看到任何javascript,css或鼠标移动活动,您可以认为它是一个机器人。您可以根据自己的需要考虑这些计数器。因此您可以根据需要以这些变量对其进行编程。如果您认为某个客户端是机器人,您可以强制他解决一些验证码,然后再继续请求。

只需注意:平板电脑通常不会创建任何鼠标移动事件。所以我还在努力弄清楚如何处理它们。建议::)