浏览器指纹实现方案:Cookie、Flash Cookies、帆布指纹识别

前言:

浏览器指纹指什么?

简单地说,浏览器指纹是一个能够唯一标识当前浏览器的字符串

作用:

在网络上精确定位到每一个个体,通过收集这些个体的数据,分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。
举个例子:
某天你在某商城购买了一台笔记本,不就你会发现浏览网页时很多广告都变成了笔记本,这是因为你已经被唯一标识了!

实现方法

1、Cookie

用户访问一个网站时,网站可以在用户当前的浏览器Cookie中永久植入一个含有唯一标示符(UUID)的信息,并通过这个信息将用户所有行为关联起来,以便更好地为访客提供个性化服务。

特点:①:用户可清除,清除后无法唯一标识。②:许多浏览器都有隐身访问模式(即关闭cookie功能)

2、Cookie替代方案——Flash Cookies

FlashCookie是由FlashPlayer控制的客户端共享存储技术:
(1)、类似HTTP Cookie,Flash Cookie利用 SharedObject类实现本地存储信息,SharedObject类用于在用户计算机上读取和存储有限的数据量,共享对象提供永久贮存在用户计算机上的对象之间的实时数据共享;
(2)、本地共享对象是作为一些单独的文件来存储的,它们的文件扩展名为.SOL;
(3)、本地共享对象并不是基于浏览器的,所以普通的用户不容易删除它们。如果要删掉它们的话,首先要知道这些文件所在的具体位置。这使得本地共享对象能够长时间的保留在本地系统上。
特点:比Cookie实现方式好,因为它无法通过浏览器快捷地删除,但比较专业的人士还是能通过本地查找删除:Flash Cookie文件存储在本地文件夹
C:/Documents and Settings/电脑用户/Application Data/Macromedia/Flash Player/#SharedObjects中。

3、帆布指纹识别(使用canvas实现)

通过查询浏览器的代理字符串,屏幕色深,语言,插件安装与支持的 MIME 类型,时区偏移量和其他功能,如本地存储和会话存储等等,然后这些值通过散列函数传递产生指纹,不需要通过 Cookie 存储就可以识别浏览器。
在绘制canvas图片时,同样的canvas绘制代码,不同机器和浏览器绘制的图片特征是相同并且独一无二的,这样以来,提取最简单的md5值便可以唯一标识和跟踪这个用户。
目前已有开源项目实现,如fingerprintjs2,fingerprintjs2 是一个快速的浏览器指纹库,纯 JavaScript 实现,没有依赖关系。默认情况下,使用 Murmur Hash 算法返回一个唯一标识当前浏览器的32位字符串。地址:https://github.com/Valve/fingerprintjs2
点击这里即可看到你的浏览器指纹: http://valve.github.io/fingerprintjs2/

引用

支持npm安装或通过script标签引入

举例:

浏览器指纹实现方案:Cookie、Flash Cookies、帆布指纹识别_第1张图片
注:如果options是一样的话,值是一样的,options是浏览器的语言、装了什么插件等信息,传入的东西越多,越精确;假如options传入的是空对象,那么意思是根据当前浏览器所有信息生成指纹。
结果:
浏览器指纹实现方案:Cookie、Flash Cookies、帆布指纹识别_第2张图片
特点:目前暂时没有好的对抗方案,无法屏蔽。

本人初步测试

浏览器指纹实现方案:Cookie、Flash Cookies、帆布指纹识别_第3张图片
浏览器指纹实现方案:Cookie、Flash Cookies、帆布指纹识别_第4张图片

其他人全面测试

测试结果:https://docs.zoho.com/sheet/open/08m2ga1cf6790c0eb4d8c8f7e54ca6ddb9b72

其测试结论

1.由于涉及设备以及浏览器的判定因素非常多,重复性很低,31台设备皆无重复

2.也正因为涉及的因素多,一旦设备系统更新 or 浏览器版本更新 or 浏览器关键插件有变化(版本更新 or 新增卸载关键插件) ,生成的ID都会改变,由于浏览器版本更新还是比较频繁的,很容易失去之前跟踪的用户

结论:canvas指纹只能作为一参考属性去判断设备的唯一性,不能只用这一个因素来判定设备唯一性。fingerPrint.js也不能取代cookie,但是可以作为辅助,如果用户清除了cookie的情况下,还可以通过fingerPrint2.js跟踪到该用户重新set cookie(结论参考)

你可能感兴趣的:(前端杂谈,JavaScript)