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中的指纹精确度还是很高的 基本不会出现不同指纹的情况。