4

我正在征求您对此的意见/经验。

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

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

另一个有趣的观察:这些请求是单一的. 没有发现这个“用户”在同一个会话中有多个浏览量的情况......

这迫使我们思考......我们应该将这些请求视为机器人吗?然后简单地阻止它们......或者那将是一个严重的错误?
Googlebot 和其他“好机器人”总是发送 HTTP_USER_AGENT 信息。

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

您的经历是什么?这里还有其他人对此主题进行过任何研究吗?

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

4

2 回答 2

4

对于真正的用户,我会考虑缺少用户代理异常,但这仍然是一种[罕见的]可能性,这可能是由防火墙、代理或隐私软件剥离用户代理引起的。

缺少用户代理的请求很可能是机器人或脚本(不一定是搜索引擎爬虫)。虽然你当然不能肯定地说。

其他可能表明机器人/脚本的因素:

  • 只请求页面本身,无法请求页面上的图片、CSS、Javascript等资源
  • 来自页面页面的请求之间的时间间隔非常短(例如在同一秒内)。
  • 未能在应设置 cookie 的后续请求中发送 cookie 或会话 ID,但请记住,真正的用户可能已禁用 cookie。
于 2013-02-15T11:35:24.360 回答
0

所以,让我们根据反应总结一些事情。

可能最好的方法是将所有可能性结合起来。:-)

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

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

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

我们需要在这里做出决定。

简单地拒绝这些请求的最简单方法 - 认为这是不正常的。当然,从这一点来看,我们可能会失去真正的用户。但根据我们的统计数据,这并不是一个很大的风险——我认为。也可以发回一条人类可读的消息“对不起,但您的浏览器不发送用户代理信息,因此您的请求被拒绝” - 或其他任何内容。如果这是一个机器人,无论如何都不会有人阅读。如果这是一个人形机器人,我们可以给她/他有用的指示。

如果我们决定不拒绝这些请求,我们可能会在此处启动 MrCode 建议的后跟踪机制。好的,我们提供该请求,但尝试开始收集行为信息。如何?例如,记下 db 中的 IP 地址(灰名单),并在响应中传回一个虚假的 CSS 文件 - 这将不是由网络服务器静态提供,而是由我们的服务器端语言提供: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 将在重定向发生时被列入白名单,瞧

于 2013-02-19T19:59:31.900 回答