首页 > web前端 > css教程 > 基于CSS的指纹

基于CSS的指纹

Lisa Kudrow
发布: 2025-03-16 09:31:11
原创
968 人浏览过

CSS-Based Fingerprinting

网站指纹识别技术令人担忧。它指的是收集足够多的用户元数据,从而识别用户身份。JavaScript 提供了各种指纹识别可能性,结合服务器访问的IP地址,使得指纹识别变得非常普遍。

然而,人们通常不会将CSS视为指纹识别的媒介,因此认为它在某种程度上是“安全的”。但Oliver Brotchie 提出了一种仅使用CSS进行一定程度指纹识别的方案。

考虑一下我们拥有的所有@media查询。我们可以使用any-pointer测试指针类型。想象一下,对于每个值,我们都从服务器请求一个完全唯一的背景图像。如果请求了该图像,我们就知道了这些@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测试暗模式偏好的事实,指纹识别就更加清晰了。事实上,Oliver 最关注的是当前CSS用户首选项媒体查询的草案:

即将发布的草案不仅使这种方法具有可扩展性,而且还会提高其精度。目前,如果没有其他方法,很难将每个请求最终与特定访问者联系起来,因为确定其来源的唯一可行方法是按连接的IP地址对请求进行分组。但是,使用新的草案,通过生成一个随机字符串并将其插入每个访问者的URL标签中,我们可以准确识别该访问者的所有请求。

还有更多方法。我们可以创建相隔1像素的媒体查询,并为每个查询请求一个背景图像,从而完美地猜测访问者的窗口大小。可能还有十几个鲜为人知的奇特媒体查询,但它们对于使用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关于指纹识别的研究非常出色,值得所有比我更了解网络安全的人关注。

以上是基于CSS的指纹的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板