指纹识别很糟糕。 该术语指的是收集足够多的关于用户的元数据,以便您基本上可以确定他们的身份。 JavaScript 可以访问各种指纹识别可能性,然后结合服务器可以访问的 IP 地址,这意味着指纹识别非常普遍。
您通常不会认为 CSS 是一种指纹识别向量,因此在某种程度上是“安全的”。 但是 Oliver Brotchie 记录了一个想法,它允许在仅使用 CSS 的情况下进行一定程度的 指纹识别。
想想我们拥有的所有 @media
查询。 我们可以使用 any-pointer
测试指针类型。 想象一下,对于每个值,我们都从服务器请求一个完全唯一的 background-image
。 如果请求了该图像,我们就知道这些 @media
查询为真。 我们可以使用类似这样的东西开始指纹识别
.pointer {
background-image: url('/unique-id/pointer=none')
}
@media (any-pointer: coarse) {
.pointer {
background-image: url('/unique-id/pointer=coarse')
}
}
@media (any-pointer: fine) {
.pointer {
background-image: url('/unique-id/pointer=fine')
}
}
结合我们可以使用 prefers-color-scheme
测试深色模式偏好的事实,指纹变得更加清晰。 事实上,它是 CSS 的当前草案 用户首选媒体查询,Oliver 最担心的是这一点
即将发布的草案不仅会使这种方法可扩展,而且还会提高其精度。 目前,如果没有替代方法,很难将每个请求明确地链接到特定访问者,因为唯一可行的方法是通过连接的 IP 地址对请求进行分组。 但是,有了新的草案,通过为每个访问者生成一个随机字符串并将其插入 URL 标签中,我们可以准确地识别来自该访问者的所有请求。
还有更多。 我们可以创建相隔 1px
的媒体查询,并为每个查询请求背景图像,完美地猜测访问者的窗口大小。 可能有十几个或更多很少使用的奇特媒体查询,但它们对使用 CSS 进行指纹识别特别有用。 将其与用于各种事物的 @supports
查询结合起来,基本上可以猜测确切的浏览器。 再将其与测试特定本地字体安装的经典技术结合起来,您就拥有了一台相当不错的指纹识别机器。
@font-face {
font-family: 'some-font';
src: local(some font), url('/unique-id/some-font');
}
.some-font {
font-family:'some-font';
}
生成的用于执行此操作的 CSS 非常庞大 (这是生成它的 Sass),但显然一旦我们可以在 URL 中使用自定义属性,它就会大大减少。
我不太担心这个问题,主要是因为我没有禁用 JavaScript,而 JavaScript 已经能够进行更广泛的指纹识别。 此外,已经存在其他类型的 CSS 安全漏洞,从读取已访问的链接(浏览器已解决)、键盘记录和用户生成的内联样式等,这些漏洞已被其他人指出 关于该主题的另一篇文章中。
但 Oliver 关于指纹识别的研究非常好,值得所有比我更了解网络安全的人一看。
如果加入 JavaScript,情况会变得更加可怕:借助 Font Access API,攻击者可以使用一些自定义公司字体(例如 Google 的 Product Sans)设置的隐藏元素,然后使用 API 进行一些低级检查以确定字体表是否匹配其版本的 Product Sans。 这样,就可以发现用户是否是 Google 员工。 https://webdev.ac.cn/local-fonts/
感谢您发表这篇精彩的文章,我真的很感谢! 您错过了永久隐藏 cookie 的部分,但其余部分都很好地涵盖了。
它基本上类似于电子邮件的跟踪像素吗?
很棒的文章。 与大多数其他多方面的事情一样,指纹识别本身并不坏,关键在于如何使用以及为什么使用它。
我们所有人或多或少都使用它,尤其是在防止我们的网站受到攻击或试图调查看似非法行为时。
您甚至不需要 CSS 来使用媒体查询或估计视窗大小。 使用
<picture>
元素,您可以根据用户偏好(深色/浅色、减少运动、精确的视窗大小、对比度偏好等)选择不同的图像; 使用图像 srcset,您可以获得有关显示分辨率的细粒度信息。 服务器日志将准确显示请求了哪个图像,而您只需要纯 HTML 即可。这就是 Tor 浏览器使用字母框来设置固定视窗大小,并鼓励用户不要对其进行自定义的原因。 也是用户必须在匿名性和可访问性之间做出选择的原因。
另一个例子:延迟加载的图像会告诉服务器用户滚动到了多远。 可以检测到特异性滚动行为,以有助于用户的指纹识别; 这就是 Tor 浏览器在“最安全”模式下禁用延迟加载的原因。 我已经提出一个问题,以便对“更安全”模式进行一些缓解措施,例如通过使滚动增量更粗糙。
网络已经让需要匿名的残疾用户失败了。 可访问性偏好是可指纹识别的,并且很少有人努力解决这个问题。