热搜:fiddler git ip ios 代理
历史搜索

什么是CSS指纹?CSS指纹如何生成?

游客2024-11-14 12:03:01
目录文章目录
  1. 什么是 CSS 指纹?
  2. CSS 指纹如何生成
  3. 为何要有 CSS 指纹
  4. CSS 指纹缺点
  5. 结语

CSS 指纹,今天翻看大佬的文章偶然发现这样一个新词,接下来我们就一起看看到底是个什么东东。

什么是 CSS 指纹?

CSS 指纹是一种跟踪和收集用户信息的技术,这种方法主要是利用了 CSS 的一些特性来跟踪用户的浏览器和设备的各种特征,这些特征以后可以用来识别或跟踪用户

CSS 指纹如何生成

原理比较简单,主要就是通过无数的媒体查询来给页面返回一套适用的 CSS 样式代码,这套 CSS 代码中会有很多的背景图片,背景图片的地址是一个特定的 URL,这个 URL 上携带了一些我们需要收集的参数,比如:

@media screen and (width: 300px) {
    body {
        background: url(https://zero2one/collect/info/width=300);
    }
}

这个媒体查询代码只会在用户设备宽度为 300px 时生效,所以我们上报的地址也可以带上 width=300 的信息,其它信息也类似这种方案去实现,这里就不一一列举了

为了避免信息的重复上报,服务端在接收到该信息上报后,最好将 HTTP 的状态码返回 410(Gone),这样该请求就会缓存下来,之后重复的请求都不会走到服务端,而是走的缓存。最终的效果就类似这样:

什么是CSS指纹?CSS指纹如何生成? 1

简单来说的话,就是 url() 里面可以填入字符串 + 0 或多个修饰符,去看了一下修饰符的含义,似乎修饰符可以写 CSS 函数(类似calc()var()attr() …),这样不就满足我们的需求了吗?来模拟写一下:

::root {
  --screen-width: 'width=300';
  --screen-height: '&height=500';
}

body {
  background: url('https://zero2one/collect/info?' var(--screen-width) var(--screen-height));  
}

这样就模拟了我们 JS 中的字符串拼接~ 岂不是美哉,然后再加上其它媒体查询的变量修改,就实现了一次请求上报所有信息的需求。

::root {
  --screen-width: '';
  --screen-height: '';
}

@media screen and (width: 300px) {
  ::root {
    --screen-width: 'width=300';
  }
}

@media screen and (height: 500px) {
  ::root {
    --screen-height: '&height=500';
  }
}

body {
  background: url('https://zero2one/collect/info?' var(--screen-width) var(--screen-height));  
}

希望这个草案能顺利通过~ 这样 CSS 指纹的方案就又更加完善了!

结语

本文对于 CSS 指纹 的探讨就到这里了,如果有什么问题或者想法,可以在评论区留言,我们互相交流讨论!

标签:CSS