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

Posted

技术标签:

【中文标题】如何从 php 中的用户代理字符串中检测浏览器欺骗和机器人【英文标题】:How to detect browser spoofing and robots from a user agent string in php 【发布时间】:2012-11-02 14:14:43 【问题描述】:

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

我也在寻找如何检测浏览器或机器人是否使用用户代理字符串来欺骗另一个浏览器。

感谢任何建议。

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

129.173.129.168 - - [11/Oct/2011:00:00:05 -0300] "GET /cams/uni_ave2.jpg?time=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"

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

【问题讨论】:

不幸的是,无论你多么努力,机器人仍然会通过你为此实现的任何东西。 不可能。您可以启发式地查看它,但仅此而已。 【参考方案1】:

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

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

然后在“autocatch.php”中将会话(或 IP 地址)记录为机器人。该链接对用户是不可见的,但它的隐藏特征希望机器人不会实现。取出 style 属性并将其放入 CSS 文件可能会有所帮助。

【讨论】:

这种技术非常适用于捕获垃圾邮件发送者,方法是输入 type="hidden" 命名的电子邮件并将您真正可见的电子邮件表单字段称为其他内容。隐藏链接的唯一缺点是它可能会被 Google 标记为黑帽 SEO 正如@WebChemist 所说,这很危险。我们生活在一个智能和“正确”解决方案往往是“错误”解决方案的世界,因为:谷歌。小心隐藏链接。【参考方案2】:

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

我在一家安全公司工作,我们的机器人检测算法如下所示:

    第 1 步 - 收集数据:

    一个。交叉检查用户代理与 IP。 (都必须是对的)

    b.检查 Header 参数(缺少什么,顺序是什么等...)

    c。检查行为(robots.txt 的早期访问和合规性、一般行为、访问的页面数、访问率等)

    第 2 步 - 分类:

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

    第 3 步 - 主动挑战:

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

    一个。 JS挑战(可以激活JS吗?)

    b.饼干挑战(可以接受饼干吗?)

    c。如果还没有定论 -> CAPTCHA

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

我们以Botopedia.org 的形式提供某种“自己动手”工具,我们的目录可用于 IP/用户名交叉验证,但要获得真正有效的解决方案,您必须依赖专门的服务.

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

GL

【讨论】:

【参考方案3】:

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

但是,请注意,您很可能会无意中找到一些真正的人。

【讨论】:

我应该澄清一下;我必须使用用户代理的日志文件来执行此操作,因此我无法检查 javascript 或加载的图像,但感谢您的帮助 那你需要发布日志,否则我不知道你要处理哪些信息。 原帖已用日志文件中的一行示例进行了编辑,实际文件包含超过 70000 行但它们的结构与此相似。【参考方案4】:

不,用户代理可以被欺骗,因此它们不被信任。

除了检查 Javascript 或图像/css 加载之外,您还可以测量页面加载速度,因为机器人通常会比任何人类访问者跳来跳去更快地抓取您的网站。但这仅适用于小型站点,在共享外部 IP 地址(大型公司或大学校园)后面有大量访问者的热门站点可能会以类似机器人的速度访问您的站点。

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

【讨论】:

没问题,这是我帮助另一个用户制作阻止脚本以阻止过多的机器人页面加载的帖子,您可以根据自己的需要进行调整webmasters.stackexchange.com/questions/35171/…【参考方案5】:

您的问题特别与使用用户代理字符串的检测有关。正如许多人所提到的,这可以被欺骗。

要了解欺骗的可能性以及检测它的难度,最好建议您使用 cURL 学习 PHP 的艺术。

本质上使用 cURL 几乎可以在浏览器(客户端)请求中发送的所有内容都可以被欺骗,但 IP 是一个明显的例外,但即使在这里,一个确定的欺骗者也会将自己隐藏在代理服务器后面,以消除你检测到他们的问题知识产权。

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

【讨论】:

以上是关于如何从 php 中的用户代理字符串中检测浏览器欺骗和机器人的主要内容,如果未能解决你的问题,请参考以下文章

用硒进行IP欺骗/购买共享代理?

用户代理,从字符串中提取操作系统和浏览器

如何进行ARP欺骗攻击

JavaScript用户代理字符串检测脚本

(PHP) 如何检测用户的计算机/浏览器处于暗模式?

javascript浏览器用户代理检测脚本实现