如何从php中的用户代理字符串中检测浏览器欺骗和机器人



到目前为止,我能够通过将这些字符串与已知的用户代理匹配来从用户代理字符串列表中检测机器人,但我想知道还有什么其他方法可以使用php来实现这一点,因为我使用此方法检索的机器人比预期的要少。

我还想知道如何检测浏览器或机器人是否正在使用用户代理字符串欺骗另一个浏览器。

欢迎提出任何建议。

编辑:这必须使用日志文件来完成,日志文件的行如下:

129.17.3129.168-【2011年10月11日:0:00:05-0300】"获取/cams/uni_ave2.jpg?时间=1318302291289 HTTP/1.1"200 20240"http://faculty.dentistry.dal.ca/loanertracker/webcam.html"Mozilla/5.0(Macintosh;U;PPC Mac OS X 10.4;en-US;rv:1.9.2.23)Gecko/20110920 Firefox/3.6.23">

这意味着除了访问时间之外,我无法检查用户行为。

除了过滤用户代理字符串中的关键字外,我还幸运地在所有页面上都添加了一个隐藏的蜜罐链接:

<a style="display:none" href="autocatch.php">A</a>

然后在"autopatch.php"中,将会话(或IP地址)记录为机器人程序。这个链接对用户来说是不可见的,但它的隐藏特性有望不会被机器人程序实现。去掉style属性并将其放入CSS文件中可能会有更多帮助。

因为,如前所述,您可以欺骗用户代理&IP,这些不能用于可靠的机器人检测。

我在一家安全公司工作,我们的机器人检测算法看起来像这样:

  1. 步骤1-收集数据:

    a。交叉检查用户代理与IP。(两者都需要正确)

    b。检查标题参数(缺少什么,订单是什么等等)

    c。检查行为(早期访问和遵守robots.txt、一般行为、访问页数、访问率等)

  2. 步骤2-分类:

    通过交叉验证数据,机器人被分类为"好"、"坏"或"可疑">

  3. 步骤3-主动挑战:

    可疑机器人面临以下挑战:

    a。JS挑战(它能激活JS吗?)

    b。饼干挑战(它能接受饼干吗?)

    c。如果仍未得出结论->CAPTCHA

这种过滤机制非常有效,但我真的不认为它可以由一个人甚至一个非专业化的提供商复制(首先,安全团队需要不断更新挑战和机器人数据库)。

我们以Botopedia.org的形式提供了一些"自己动手"的工具,这是我们的目录,可以用于IP/用户名的交叉验证,但要想获得真正高效的解决方案,您必须依靠专门的服务。

有几个免费的机器人监控解决方案,包括我们自己的,大多数都会使用我上面描述的相同策略(或类似策略)。

GL-

除了比较用户代理之外,您还需要记录活动并查找机器人的行为。通常情况下,这将包括检查/robots.txt和不加载图像。另一个技巧是询问客户端是否有javascript,因为大多数机器人不会将其标记为已启用。

然而,要小心,你很可能会意外地遇到一些真诚的人。

否,用户代理可能会被欺骗,因此不受信任。

除了检查Javascript或image/css加载外,您还可以测量页面加载速度,因为机器人通常会比任何人类访问者跳来跳去的速度快得多。但这只适用于小型网站,那些共享外部IP地址(大型公司或大学校园)背后有大量访问者的热门网站可能会以类似机器人的价格访问你的网站。

我想你也可以测量他们加载的顺序,因为机器人会按照先到先得的爬行顺序爬行,而人类用户通常不符合这种模式,但跟踪有点复杂

您的问题特别涉及使用用户代理字符串的检测。正如许多人提到的那样,这可能是伪造的。

要了解欺骗中可能存在的情况,并了解它的检测难度,最好使用cURL学习PHP中的艺术。

从本质上讲,使用cURL,几乎所有可以在浏览器(客户端)请求中发送的内容都可以被欺骗,但IP除外,但即使在这里,一个坚定的欺骗者也会将自己隐藏在代理服务器后面,以消除您对其IP的检测。

不用说,每次发出请求时使用相同的参数将能够检测到欺骗,但使用不同的参数旋转将使在真正的流量日志中检测到任何欺骗变得非常困难,如果不是不可能的话。

最新更新