为什么浏览器会发送如此详细的用户代理字符串?

信息安全 网页浏览器 指纹
2021-08-15 11:50:01

User-Agent现代网络浏览器通过标题泄漏大量信息。以下是来自 Wikipedia的 iPad 上 Safari 的示例:

Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us)
AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

很明显,这里提供的信息远远超出了合法网络服务对浏览器/操作系统目标的任何意义。事实上,这种详细程度似乎唯一能做的就是促进跟踪和浏览器指纹识别,毫不奇怪,它被广泛用于此目的。

为什么浏览器供应商允许/支持这一点?为什么不像

Mozilla/5.0 (Safari 5.1; iOS/iPad; en-us)

足够的?甚至en-us不需要,因为它被Accept-Language标题复制了,并且服务器是否有权知道我正在使用什么设备也是值得商榷的,留给我们

Mozilla/5.0 (Safari 5.1; iOS)

它仍然捕获浏览器和操作系统版本,因此对于所有合法目的应该是完全足够的。

2个回答

由于历史原因,用户代理字符串非常复杂。这是一个很长的故事,但简短的版本是每个人都希望看起来像其他人,以绕过限制基于浏览器访问网页的服务器。是的,这曾经是过去的事情。现在我们陷入了这种悲伤的混乱之中。

好消息是,这意味着即使用户代理字符串很长,但其中很多并不是真正有用的信息。如果我们删除样板,我们实际上可以从这个字符串中获得的关于你信息是:

  • iPad: 你在 iPad 上。
  • CPU OS 3_2_1 like Mac OS X:您使用的是指定版本的 iOS。
  • en-us: 您的语言设置为美式英语。
  • AppleWebKit/531.21.10:您正在使用具有该特定版本的 WebKit 引擎。
  • Mobile/7B405:您的固件版本。
  • 您正在使用 Safari。从来没有明确说过,但可以从字符串的结构中推断出来。

这是很多对指纹识别有用的信息。我想说这仍然是一个很好的做法:

  • 在确定要服务的网站版本时,所有这些信息也很有用。例如,如果某个版本的 WebKit 中存在已知错误,您可能希望包含一些 CSS 和解决方法。这有合法的用途。
  • 如果您使您的软件保持最新状态,那么您的用户代理无论如何都不会是唯一的。
  • 有很多方法可以对浏览器进行指纹识别,以便删除有用的信息以防止它发生。只要看看Panopticlickevercookie

我的主要观点是要求浏览器供应商删除功能并不能解决根本问题。如果您想保持无法追踪,则需要使用专门为此设计的浏览器。这将涉及失去许多合法功能(例如,调整浏览器窗口的能力)。

如果您只担心用户代理标头,那么有些插件会更改它甚至为您随机化它。但是,如果您担心在网络上被追踪,您可能应该担心的远不止这些。

首先,重要的是要了解用户代理的概念从未用于指纹。而是获取有关浏览器、平台、渲染引擎和其他设备信息的信息以帮助开发人员。

用户代理于 1996 年首次添加到HTTP 标准中当时浏览器标准通常是狂野的西部。很少有两个浏览器呈现完全相同的情况。有时,同一个浏览器在不同平台上的功能会完全不同。甚至同一浏览器的两个不同版本的工作方式也会完全不同。因此,为特定浏览器或浏览器范围定制的同一页面的多个版本是正常的。用户代理是获取服务页面的这些详细信息的唯一方法。

今天,现代开发不鼓励用户代理嗅探内容剪裁。相反,开发人员应该使用特征检测来检测和适应然而,即使这是一种更好、更受欢迎的方式,也不要指望它会很快从浏览器中删除。由于它的广泛使用,这将是一个突破性的变化。还有一种叫做不可检测的东西。这意味着无法检测到该功能,并且用户代理可能是检测其可用性或提供替代方法的最后措施。或者存在特定浏览器/渲染器的已知错误,您希望通过用户代理检测其可能性。

此外,出于安全原因,浏览器通常会沙盒网站访问来自机器的任何详细信息。用户代理是浏览器可以自愿放弃这些否则无法获得的信息的少数几个地方之一。所以它通常是描述性的,因为没有其他方法可以拉它。而触摸、屏幕尺寸等可以通过特征检测来完成,因此无需包括在内。

用于指纹的用户代理字符串的整个想法和使用是其可用性的副作用。但这从来都不是此功能的预期目的或规范。