天天看点

Fingerprint2 生成浏览器指纹

Fingerprint2介绍

Fingerprint2 是一款开源的设备指纹生成器。主要用于判断用户是否是新增用户,或者判断设备是否为新增访问设备。浏览器指纹是浏览器的唯一id,类似于人类的指纹是唯一的,所以简称为浏览器指纹。指纹信息可以是字体、canvas、插件、屏幕分辨率、时区、地理位置或者是你使用的语言等其他的参数,信息越多并且信息的区别度越大,越能决定浏览器指纹的准确性。

Fingerprint2会取的设备信息

userAgent:navigator.userAgent
language : 语言
colorDepth: 返回目标设备或缓冲器上的调色板的比特深度 screen.colorDepth
deviceMemory: 以千兆字节为单位返回设备内存量。该值是通过舍入到最接近的2的幂并将该数除以1024而给出的近似值。链接
pixelRatio: 像素比 devicePixelRatio
hardwareConcurrency:navigator.hardwareConcurrency返回可用于运行在用户的计算机上的线程的逻辑处理器的数量
screenResolution: 检测屏幕宽高,并根据屏幕方向矫正返回值[width,height]
availableScreenResolution:返回屏幕分辨率[width,height],无头浏览器无法获取
timezoneOffset: 返回从当前区域设置(主机系统设置)到UTC的时区差异(以分钟为单位)链接
timezone:时区
sessionStorage: 是否支持sessionStorage,不支持时返回错误
localStorage: 是否支持localStorage
indexedDb:是否支持indexedDb
addBehavior:此时可能未定义body或以编程方式删除
openDatabase: 返回是否支持Web SQL
cpuClass:返回浏览器系统的 CPU 等级,一般无法获取
platform: 返回表示浏览器平台的字符串,该规范允许浏览器始终返回空字符串,因此不要依赖此属性来获得可靠的答案.链接
doNotTrack: 返回用户的“不跟踪”设置。如果用户请求不被网站,内容或广告跟踪,则为“1”
plugins:返回浏览器安装的插件列表
canvas: 如果浏览器支持canvas则返回生成baes64数据
webgl:返回浏览器对webgl绘图协议的支持情况汇总
webglVendorAndRenderer: 返会显卡型号相关信息
adBlock:返回是否安装去广告插件
hasLiedLanguages: 返回用户是否改变了首选语言
hasLiedResolution:返回用户是否改变了分辨率
hasLiedOs:返回用户是否改变了操作系统
hasLiedBrowser:返回用户是否改变了浏览器
touchSupport: 返回最大触摸点数,是否支持touch,是否支持ontouchstart事件]
fonts:返回从64种字体种筛选出的可用字体
fontsFlash:Flash字体枚举,如果没有swfobject,不会触发
audio: 返回音频指纹
enumerateDevices:navigator.mediaDevices 请求可用媒体输入和输出设备的列表,例如麦克风,相机,耳机等
           

项目中应用

1.npm下载Fingerprint2依赖

npm install fingerprintjs2 -S
           

2.项目中引入

import Fingerprint2 from 'fingerprintjs2 '
           
const options = {
	fonts:{
	extendedJsFonts:true
},
	excludes:{
		language:true,
		colorDepth:true,
		......
	}	
}

           
Fingerprint2.get(options,(components) => {
      var values = components.map((component)=component.value)
      let murmur = Fingerprint2.x64hash128(values.join(''), 31)
})
           

指纹重复

Fingerprint2.get(options,(components) => {
      components.push({
      		key:'ip',
		value:'192.168.x.x' // 通过接口获取ip
      })
      var values = components.map((component)=component.value)
      let murmur = Fingerprint2.x64hash128(values.join(''), 31)
})