这是一个众所周知的事实(至少在隐私意识社区中),一个非常用于跟踪的因素是已安装字体的列表,浏览器似乎会暴露这些字体,而跟踪器会利用这一点。
关于如何避免这种情况(安装字体的欺骗列表等)有很多问题和答案,但我想知道:为什么浏览器需要公开安装的字体?它首先满足哪些用例?
这是一个众所周知的事实(至少在隐私意识社区中),一个非常用于跟踪的因素是已安装字体的列表,浏览器似乎会暴露这些字体,而跟踪器会利用这一点。
关于如何避免这种情况(安装字体的欺骗列表等)有很多问题和答案,但我想知道:为什么浏览器需要公开安装的字体?它首先满足哪些用例?
对于像游戏这样的超精确屏幕布局,开发人员通常需要知道渲染的大小。虽然开发人员可以指示浏览器以 10 像素进行绘制,但操作系统字体大小设置、缩放、字体变化等都会影响实际渲染的高度。通过回读输出大小,可以进行小的字体大小调整,直到它“恰到好处”。这种机制适用于页面上的所有框,不仅是字体,而且框通常会“拉伸”以填充文本内容,并且将两者结合起来可以揭示是否以某种字体渲染会使框的尺寸与新字体之前不同应用。
教科书示例是重新调整 iframe 的大小以适应另一个合作域上的错误消息页面。
现在开始阻止字体可能是安全的,因为自定义字体可以通过页面本身通过 Web 交付,而不是依赖于操作系统的内置插件。这些也可以被发现,但是由于页面带来了它们,因此发现没有任何价值。请注意,发现是正确的词;没有办法迭代任何字体列表,无论是原生的还是基于网络的,所以猜测和检查是唯一的方法。
浏览器不会直接列出已安装字体的可用列表。相反,它们提供有关特定对象(如文本框)的大小的信息。由于使用不同字体渲染的相同文本会导致对象大小略有不同,这可用于推断使用哪种字体渲染特定文本,从而检查是否使用特定字体渲染文本(并因此安装在系统上)或不。
有关详细信息,请参阅browserleaks.com 上的字体指纹识别或通过字体度量对网络用户进行指纹识别。