【问题标题】:Best way to detect bot from user agent?从用户代理检测机器人的最佳方法?
【发布时间】:2011-05-05 15:04:44
【问题描述】:

时间过去了,但仍然没有完美的解决方案... 看看是否有人有一个好主意来区分机器人和人工加载的网页? 最先进的技术仍在加载一长串知名的 SE bot 并解析 USER AGENT?

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

【问题讨论】:

  • Pekka,是的,非常相似!但是那里没有公认的解决方案......谁知道这次也许有人可以启发我们? :-)
  • 这里的答案是假设机器人可能试图欺骗用户代理。如果机器人愿意声明它是机器人呢? robots.txt 规范似乎正在标准化,RPA 变得越来越普遍,所以我认为这很快就会成为一个问题。

标签: php search


【解决方案1】:

如果可能,我会尝试使用honeypot 方法来解决这个问题。它对大多数用户来说是不可见的,并且会阻止许多机器人,尽管没有一个决心工作,因为他们可以为你的网站实施特殊代码,一旦他们弄清楚你的游戏就跳过了蜜罐领域。但是对于大多数人来说,机器人所有者可能需要更多的关注。将有大量其他网站无需任何额外努力即可接受垃圾邮件。

不时被跳过的一件事是,重要的是让机器人认为一切正常,没有错误消息或拒绝页面,只需像对任何其他用户一样重新加载页面,除了跳过添加机器人内容到网站。这样一来,机器人日志中就不会出现任何危险信号,并且不会由所有者采取行动,因此需要更多的审查才能确定您是否允许 cmets。

【讨论】:

  • Honeypots 是处理自动化的“休闲”网络蜘蛛的一种很好的方法,但它们当然不能帮助任何类型的有针对性的机器人活动。
  • 是的,我不认为这是与恶意机器人的战斗结束的地方,但这是一个很好的第一步,它可以让您的网站在相当长一段时间内保持无垃圾邮件,直到您真正受欢迎,并且机器人开始专门针对您,那么您必须稍微加强一下游戏。
【解决方案2】:

没有挑战(例如验证码),您只是在黑暗中拍摄。用户代理可以轻松设置为任意字符串。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我需要收集 USER stats,过滤掉非人类用户代理,希望自己完成,请不要使用 Google Analytics 等工具!
    • 虽然这本身就是一篇有用的文章,但它不符合答案的条件;在我看来,本来更适合作为评论。
    • @Core:不,这不是评论。我回答,他不能这样解决问题。至少没有理由不投票。
    • 他要求的是最好的方法,而不是是否可以/应该按照他认为的方式进行。所以你的回答对表格没什么帮助。
    • 首先请告诉我你是否投了反对票,所以我知道参加这个绝对跑题的讨论是否有意义。 PS:他确实问你是否应该使用用户代理来识别机器人(至少他问这是否是最先进的。)
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        我本人正在为不同目的编写网络爬虫。我使用网络浏览器 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),则它不会被检测到。

        【讨论】:

        • 自定义网络机器人当然可以执行 javascript,即使它们不在图形浏览器中运行
        • @Gareth 我同意,编辑了我的答案。我实际上指的是不需要 javascript 的简单刮板。我认为大多数人没有。
        【解决方案7】:

        我确定我会对此进行投票,但我不得不发布它: Constructive

        无论如何,验证码是目前防止机器人入侵的最佳方式,它不能批准所有用户提交的内容。

        -- 编辑--

        我刚刚注意到您的 P.S.,而且我不确定在不与它交互的情况下诊断机器人。在这种情况下,您最好的选择可能是尽早捕获机器人并实施 1 个月的 IP 限制,之后如果您不断向其返回 HTTP 404,BOT 应该放弃。 Bot 通常从服务器运行并且不会更改其 IP,因此这应该是一种平庸的方法。

        【讨论】:

        • (IP) 概念证明:没有针对 PHP/Perl/Python 的公共代理链实现。 (虽然可能只有一个代理,但通常机器人不会那么偏执)
        【解决方案8】:

        我建议使用Akismet,这是一个垃圾邮件预防插件,而不是任何类型的验证码或 CSS 技巧,因为它非常擅长在不破坏用户体验的情况下捕获垃圾邮件。

        【讨论】:

          【解决方案9】:

          诚实的漫游器(例如搜索引擎)通常会访问您的 robots.txt。从中您可以了解他们的用户代理字符串并将其添加到您的机器人列表中。

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

          【讨论】:

            猜你喜欢
            • 2012-01-25
            • 2016-07-28
            • 2015-12-09
            • 1970-01-01
            • 2011-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-09
            相关资源
            最近更新 更多