HTTP_USER_AGENT未设置-是否正常?或者可能是一个机器人


HTTP_USER_AGENT not set - is it normal? or probably a bot?

询问您对此的看法/经验

我们的CMS正在从HTTP_USER_AGENT字符串中获取信息。最近,我们在代码中发现了一个错误——忘记检查HTTP_USER_AGENT是否存在(这是可能的,但老实说:我们只是跳过了它,没想到会发生)——这些情况导致了错误。因此,我们已经更正了它,并在那里安装了跟踪:如果HTTP_USER_AGENT未设置,则会向我们的跟踪系统发送警报

现在,我们有来自许多网站的过去几个月的数据/统计数据。现在我们的统计数据显示这是非常罕见的。~0.05-0.1%

另一个有趣的观察结果是:这些请求是单一的。没有发现这个"用户"在同一会话中有多个页面浏览的情况

这迫使我们思考。。。我们应该把这些请求当作机器人吗?简单地把他们挡在外面。。。或者这将是一个严重的错误
Googlebot和其他"好机器人"总是发送HTTP_USER_AGENT信息

我知道防火墙或代理服务器可能会更改(或删除)此用户代理信息。但根据我们的统计数据,我无法澄清这一点

你的经历是什么?这里还有其他人对这个话题做过研究吗

我在stackoverflow上发现的其他帖子只是接受"可能没有发送此信息"这一事实。但我们为什么不质疑一下呢这真的正常吗??

我认为缺乏用户代理对于真正的用户来说是不正常的,但这仍然是一种[罕见]的可能性,可能是由防火墙、代理或隐私软件剥离用户代理引起的。

缺少用户代理的请求很可能是机器人程序或脚本(不一定是搜索引擎爬网程序)。当然,尽管你不能肯定。

可能指示机器人程序/脚本的其他因素:

  • 仅请求页面本身,无法请求页面上的资源,如图像、CSS和Javascript
  • 页面请求之间的时间间隔非常短(例如在同一秒内)
  • 在本应设置cookie的后续请求中发送cookie或会话ID失败,但请记住,真正的用户可能禁用了cookie

因此,让我们根据反应总结一些事情

也许最好的办法是把所有的可能性结合起来

如果这是第一个(在会话中-这已经足够了)传入请求,我们可以根据多个标准立即检查请求。在服务器端,我们(可能)有一个动态数据库(根据用户代理信息字符串/IP地址构建)。我们可以通过镜像公共数据库来创建这个数据库。(是的,互联网上有几个定期更新的公共数据库可用于检查机器人程序。它们不仅包含用户代理字符串,还包含源IP)

如果我们有命中,我们可以使用数据库快速检查它。如果过滤器显示"OK",我们可能会将其标记为受信任的机器人并提供请求

如果请求中没有可用的用户代理信息,我们会遇到问题。。。(事实上,这就是我问题的由来)。如果我们没有用户代理信息该怎么办?:-)

我们需要在这里做出决定

简单地拒绝这些请求的最简单的方法是——认为这是不正常的。当然,从这一点来看,我们可能会失去真正的用户。但根据我们的统计数据,我认为这不是一个大风险。也可以发送回一条可读的信息"对不起,但你的浏览器没有发送用户代理信息,所以你的请求被拒绝了",或者其他什么。如果这是一个机器人,无论如何都不会有人读。如果这是一个人形机器人,我们可以给她/他一些有用的指示

如果我们决定不拒绝这些请求,我们可以在这里启动MrCode建议的后跟踪机制。好的,我们满足这个要求,但试着开始收集行为信息。怎样例如,注意db中的IP地址(灰色列表),并在响应中传递回一个假的CSS文件-它将不会由Web服务器静态提供,而是由我们的服务器端语言提供:PHP、Java或我们正在使用的任何语言。如果这是一个机器人,它不太可能尝试下载CSS文件。。。而如果这是一个真正的浏览器,它肯定会做到——可能在很短的时间内(例如1-2秒)。我们可以很容易地继续处理为假CSS文件提供服务的操作。只需在灰名单数据库中进行IP查找,如果我们判断行为正常,我们可能会将该IP地址列为白名单(例如..)
如果我们再次收到来自灰色列表IP地址的另一个请求
a) 在1-2秒的时间范围内:我们可能会将响应延迟几秒钟(等待并行线程,也许它会同时下载假CSS…),并定期检查我们的灰名单数据库,看看IP地址是否消失
b) 在1-2秒的时间范围内:我们只是拒绝响应

所以,类似的事情。。。听起来怎么样

但这还不完美。由于在这个机制中,我们为潜在的机器人提供了一个真实的页面……我认为我们也可以避免这种情况。我们可能会为第一次请求发回一个空的、稍微延迟的重定向页面。。。这可以通过HTML HEAD部分轻松完成。或者wwe也可以使用Javascript,这也是一个很好的机器人过滤器。。。但在关闭Javascript的情况下,也可能是真正的用户过滤器(我不得不说,如果我有一个没有用户代理字符串的访问者,并且关闭了Javascript,那真的应该见鬼去吧…)当然,我们可以在页面上添加一些文本"你很快就会被重定向"或其他东西来安抚潜在的真正用户。当这个页面正在等待重定向发生时,一个真正的浏览器会下载伪造的CSS,因此在重定向发生时IP将被列入白名单,瞧