我询问你的观点/经验
我们的CMS从HTTP_USER_AGENT字符串中获取信息。最近我们发现了代码中的一个错误 - 忘了检查HTTP_USER_AGENT是否存在(这是可能的,但老实说:我们只是跳过它,不希望发生这种情况)或者没有 - 这些情况导致了错误。所以我们已对其进行了更正,并在那里安装了跟踪:如果未设置HTTP_USER_AGENT,则会向我们的跟踪系统发送警报。
现在我们有来自过去几个月的许多网站的数据/统计数据。现在我们的统计数据显示非常罕见。 ~0.05-0.1%
另一个有趣的观察结果:这些请求是单一的。未找到此“用户”在同一会话中有多个综合浏览量的任何情况...
这迫使我们思考......我们应该将这些要求视为机器人吗?并简单地阻止他们......或者那将是一个严重的错误?
Googlebot和其他“好机器人”总是发送HTTP_USER_AGENT信息
我知道防火墙或代理服务器可能会改变(或删除)此用户代理信息。但根据我们的统计数据,我无法澄清这一点......
你有什么经历?是否有其他人对此主题进行过任何研究?
我在stackoverflow上发现的其他帖子只是接受“这可能不会发送此信息”的事实。但是我们为什么不暂时质疑呢?这真的很正常吗?
答案 0 :(得分:2)
我会认为真正的用户缺乏用户代理异常,但它仍然是一种罕见的可能性,可能是由剥离用户代理的防火墙,代理或隐私软件引起的。
缺少用户代理的请求很可能是机器人或脚本(不一定是搜索引擎爬虫)。虽然你当然不能肯定地说。
可能表示机器人/脚本的其他因素:
答案 1 :(得分:0)
所以,让我们总结一些事情 - 基于反应
可能最好的方法是结合所有可能性。 :-)
如果这是第一个(在会话中 - 它就足够了)传入请求,我们可以立即针对多个标准检查请求。在服务器端,我们(可能)有一个动态数据库(根据用户代理信息字符串/ IP地址构建)我们可以通过镜像公共数据库来创建这个数据库。 (是的,互联网上有几个公共的,定期更新的数据库可用于检查机器人。它们不仅包含用户代理字符串,还包含源IP)
如果我们有一个命中,我们可以使用数据库快速检查它。如果该过滤器显示“OK”,我们可能会将其标记为受信任的机器人并提供请求
如果请求中没有可用的用户代理信息,我们就会遇到问题...(实际上这是我的问题的起源)。如果我们没有用户代理信息该怎么办? :-)
我们需要在这里做出决定
简单地拒绝这些请求的最简单方法 - 考虑这种异常。当然从这一点来看,我们可能会失去真正的用户。但根据我们的统计数据,这不是一个很大的风险 - 我认为。也可以发回一条人类可读的消息“抱歉,但您的浏览器不会发送用户代理信息,因此您的请求被拒绝” - 或者其他什么。如果这是一个机器人,那么无论如何都无法阅读。如果这是一个人形,我们可能会给她/他可用的指示
如果我们决定不拒绝这些请求,我们可以在此处启动MrCode建议的跟踪后跟踪机制。好的,我们提供该请求,但尝试开始收集行为信息。怎么样?例如。请注意db(greylist中)中的IP地址,并在响应中传回一个假的CSS文件 - 静态Web服务器不会提供服务,而是我们的服务器端语言:PHP,Java或我们正在使用的任何东西。如果这是一个机器人,它不太可能尝试下载一个CSS文件......如果这是一个真正的浏览器,它肯定会做 - 可能在很短的时间(例如1-2秒)内。我们可以轻松地继续处理为假CSS文件提供服务的过程。只需在灰名单数据库中进行IP查找,如果我们判断行为正常,我们可以将该IP地址列入白名单(例如..)
如果我们再次从灰名单的IP地址发出另一个请求
a)在1-2秒的时间范围内:我们可能会延迟我们的响应几秒钟(等待并行线程,也许它会同时下载假的CSS ...),并定期检查我们的灰名单数据库,看看是否IP地址消失与否
b)在1-2秒的时间范围内:我们只是否认答复
那样的话......听起来怎么样?
但这还不完美。因为在这个机制中我们为潜在的机器人提供了一个真实的页面......我想我们也可以避免这种情况。对于第一个请求,我们可能会发回一个空的,稍微延迟的重定向页面......这可以通过HTML HEAD部分轻松完成。或者,我们也可以使用Javascript,这是一个伟大的僵尸过滤器...但也可能是真正的用户过滤器关闭Javascript(我不得不说,如果我有一个访客没有用户代理字符串和stwitched关闭Javascript,真的应该去地狱......)当然我们可以在页面上添加一些文字“你将很快被重定向”或者某种东西来平息潜在的真实用户。虽然此页面正在等待重定向发生,但真正的浏览器会下载伪造的CSS - 因此IP将在重定向发生时列入白名单,并且瞧