帆布指纹+fingerprintjs

帆布指纹+fingerprintjs

引言

是否遇到过这样的场景,访问某宝或某东购物网站,在没有登录的情况下访问一些商品A,过一段时间你访问的那些网站的浏览器就会推送跟商品A相似的商品。这里是否会有一些疑虑,当初学习web相关知识的时候,用户的标识是cookie。浏览器如何在没有cookie的情况下如何做到广告的精准投放? 上面的场景跟帆布指纹有关系,虽然是很早的技术了,但是小菜鸡才刚刚知道,这里写一篇随笔记录一下。

帆布指纹

帆布指纹原理

HTML<canvas>元素用于通过 JavaScript 动态绘制图形,将这个canvas进行base64编码,最后生成base64编码的hash值,hash值就是canvas指纹。括号中的话属于引用 (浏览器+操作系统+GPU+图形驱动器的唯一性,任何两个不相同的浏览器,或者不同电脑上面的相同浏览器 都会存在细丝末毫的不同,而这个不同会导致浏览器绘制的图像肉眼看起来相同,但是某几个像素点可能存在几个像素的偏移或者灰度偏移,然后生成的hash值就完全不一样了)。话虽然看起来对好像是这么回事,但是我们是在浏览器上执行的js代码,如果在中层做一点手脚是不是直接就可以干扰生成的指纹,或者在浏览器这层屏蔽掉更底层的差异,这样生成的指纹会不会导致不同的设备之间有着相同的指纹。

帆布指纹实现

var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var txt = 'xiaoliu';
ctx.textBaseline = "xiaoliu";
// 不太会js这里需要图片加点东西但是懒得看js了
var b64 = canvas.toDataURL().replace("data:image/png;base64,","");
console.log(b64);

demo画个自定义的图再加点东西返回图片内容的base64编码 这里没进行md5hash处理

chrome的正常模式和匿名模式和360浏览器的结果一样......,360使用了chrome内核。firefox与Start Tor Browser都有各自的base64

下面是chrome内核的效果

tor的结果

帆布指纹防御

很有缺陷, 不能完全的避免重复标识的问题。

Chrome也有着 "Canvas Fingerprint Defender"的插件对canvas进行处理

Continue

fingerprintjs

canvas指纹存在重复标识的问题,万恶的广告商到底是咋个实现精准的跟踪我的呢????

音频指纹+显示器指纹+摄像指纹+语言+useragent+.............多重方式一混合,我们浏览器就被精准定位了。

github上有一个工具可以综合上面的各种东西产生一个对应的id

https://github.com/fingerprintjs/fingerprintjs

<script>
  // Initialize the agent at application startup.
  const fpPromise = import('https://openfpcdn.io/fingerprintjs/v3')
    .then(FingerprintJS => FingerprintJS.load())

  // Get the visitor identifier when you need it.
  fpPromise
    .then(fp => fp.get())
    .then(result => {
      // This is the visitor identifier:
      const visitorId = result.visitorId
      console.log(visitorId)
    })
    .catch(error => console.error(error))
</script>

对各大网站进行测试

听我说谢谢你~

京东

天猫

百度

posted @ 2022-09-29 13:24  beginner_z  阅读(1172)  评论(0编辑  收藏  举报