fingerprint2.js跨app使用问题

笪建章
2023-12-01

fingerprint2.js是一款开源的设备帆布指纹采集器
其实可配置的参数有

1、User Agent
2、语言
3、颜色深度
4、屏幕分辨率
5、时区
6、是否具有会话存储
7、是否具有本地存储
8、是否具有索引DB
9、IE是否指定AddBehavior
10、是否有打开的DB
11、CPU类
12、平台
13、是否DoNotTrack
14、已安装的Flash字体列表
15、使用JS/CSS检测到的字体列表(最多可检测到Flash之外的500种字体)
16、Canvas指纹
17、WebGL指纹
18、浏览器的插件信息
19、是否安装AdBlock
20、用户是否篡改了语言
21、用户是否篡改了屏幕分辨率
22、用户是否篡改了操作系统
23、用户是否篡改了浏览器
24、触摸屏检测和能力

使用方法如下

import Fingerprint2 from 'fingerprintjs2';

function getNewFinger() {
	let options = {
	    excludes: {
	         // 需要检测的 未排除
	         pixelRatio: false, //设备像素比
	         hardwareConcurrency: false, //可用于运行在用户的计算机上的线程的逻辑处理器的数量。        手机获取不到
	         platform: false, //运行浏览器的操作系统和(或)硬件平台
	         canvas: false, //使用 Canvas 绘图
	         webgl: false, //WebGL指纹信息
	         webglVendorAndRenderer: false, //具有大量熵的WebGL指纹的子集
	         hasLiedLanguages: false, //用户是否篡改了语言
	         hasLiedResolution: false, //用户是否篡改了屏幕分辨率
	         hasLiedOs: false, //用户是否篡改了操作系统
	         hasLiedBrowser: false, //用户是否篡改了浏览器
	         touchSupport: false, //触摸屏检测和能力
	         // 被排除在外的
	         language: true, //语言种类
	         colorDepth: true, //目标设备或缓冲器上的调色板的比特深度
	         deviceMemory: true, //设备内存        ios取不到 安卓(微信)取的到
	         sessionStorage: true, //是否会话存储
	         localStorage: true, //是否具有本地存储
	         indexedDb: true, //是否具有索引DB
	         cpuClass: true, //浏览器系统的CPU等级        手机 电脑均获取不到
	         doNotTrack: true, //do-not-track设置
	         userAgent: true, //用户代理
	         webdriver: true, //网页内驱动软件
	         screenResolution: true, //当前屏幕分辨率
	         availableScreenResolution: true, //屏幕宽高(空白空间)
	         timezoneOffset: true, //本地时间与 GMT 时间之间的时间差,以分钟为单位
	         timezone: true, //时区
	         addBehavior: true, //IE是否指定AddBehavior
	         openDatabase: true, //是否有打开的DB
	         plugins: true, //浏览器的插件信息
	         adBlock: true, //是否安装AdBlock
	         fonts: true, //使用JS/CSS检测到的字体列表
	         fontsFlash: true, //已安装的Flash字体列表
	         audio: true, //音频处理
	         enumerateDevices: true, //可用的多媒体输入和输出设备的信息。
     	},
	 };
	 let murmur = '';
	 Fingerprint2.get(options, (components) => {
	     var values = components.map((component) => component.value);
	     murmur = Fingerprint2.x64hash128(values.join(''), 31);
	 });
	 return murmur;
}

通过一种murmur哈希算法得到最后的哈希值作为指纹

最初使用它的原因是想将在不同app端推广到我们的app里的用户进行识别 归因

后面经过测试发现 这款采集器只适用于在同一款app下的指纹采集识别 不同的app下 由于浏览器内核的差异 webgl算法 canvas能力都不同 会导致采集的指纹不同 无法计算出相同的指纹。另外 在同一个app中的指纹精确度还是很高的 基本不会出现不同指纹的情况。

 类似资料: