1.下载方式

CDN: https://cdnjs.com/libraries/fingerprintjs2(这里查找最新CDN地址)
Bower: bower install fingerprintjs2
NPM: npm install fingerprintjs2
Yarn: yarn add fingerprintjs2
Github地址:https://github.com/Valve/fingerprintjs2

2.使用方式

总结自Github文档

2.1默认方式

使用setTimeout 或requestIdleCallback 将其延迟几毫秒以确保指纹一致,options 为自定义配置项,result 是计算出来的指纹ID,components 为计算指纹时所使用到的组件数组

if (window.requestIdleCallback) {
requestIdleCallback(function () {
	//必须在v2.0语法提供options参数
	Fingerprint2.getV18(options, function (result, components) {
  	console.log(result);//结果是哈希指纹
  	console.log(components);//组件是{key:\'foo\'的数组,值:\'组件值\'}
})
    })
} else {
    setTimeout(function () {
    Fingerprint2.getV18(options, function (result, components) {
  	console.log(result);//结果是哈希指纹
  	console.log(components);//组件是{key:\'foo\'的数组,值:\'组件值\'}
})
    }, 500)
}

如果使用get ,它不会对结果进行哈希处理,需手动使用murmur哈希函数(可替换成自定义的哈希函数)来创建哈希指纹

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

  

2.2配置

2.2.1配置方式:

var options = {fonts: {extendedJsFonts: true}, excludes: {userAgent: true}}

2.2.2默认选项配置(源码):

var defaultOptions = {
    preprocessor: null,
    audio: {
      timeout: 1000,
 // 在iOS 11上,音频上下文只能用于响应用户交互。我们要求用户在iOS 11上显式启用音频指纹https://stackoverflow.com/questions/46363048/onaudioprocess-not-called-on-ios11#46534088
      excludeIOS11: true
    },
    fonts: {
      swfContainerId: \'fingerprintjs2\',
      swfPath: \'flash/compiled/FontList.swf\',
      userDefinedFonts: [],
      extendedJsFonts: false
    },
    screen: {
       // 当用户旋转移动设备时确保指纹一致
      detectScreenOrientation: true
    },
    plugins: {
      sortPluginsFor: [/palemoon/i],
      excludeIE: false
    },
    extraComponents: [],
    excludes: {
      // Unreliable on Windows, see https://github.com/Valve/fingerprintjs2/issues/375
      \'enumerateDevices\': true,
      // 取决于浏览器缩放
      \'pixelRatio\': true,
      //取决于某些浏览器的隐身模式 
      \'doNotTrack\': true,
      // 已经使用JS字体
      \'fontsFlash\': true
    },
    NOT_AVAILABLE: \'not available\',
    ERROR: \'error\',
    EXCLUDED: \'excluded\'
  }

  

2.2.3配置项涵义:

参考:

Excludes为{}时将包含即不会排除以下组件(源码)

 var components = [
    {key: \'userAgent\', getData: UserAgent},//用户代理
    {key: \'language\', getData: languageKey},//语言种类
	{key: \'colorDepth\', getData: colorDepthKey},
	//目标设备或缓冲器上的调色板的比特深度
    {key: \'deviceMemory\', getData: deviceMemoryKey},//设备内存
    {key: \'pixelRatio\', getData: pixelRatioKey},//设备像素比
	{key: \'hardwareConcurrency\', getData: hardwareConcurrencyKey},
	//可用于运行在用户的计算机上的线程的逻辑处理器的数量。
	{key: \'screenResolution\', getData: screenResolutionKey},
	//当前屏幕分辨率
	{key: \'availableScreenResolution\', getData: availableScreenResolutionKey},//屏幕宽高(空白空间)
	{key: \'timezoneOffset\', getData: timezoneOffset},
	//本地时间与 GMT 时间之间的时间差,以分钟为单位
    {key: \'timezone\', getData: timezone},//时区
    {key: \'sessionStorage\', getData: sessionStorageKey},//是否会话存储
    {key: \'localStorage\', getData: localStorageKey},//是否具有本地存储   {key: \'indexedDb\', getData: indexedDbKey},//是否具有索引DB
	{key: \'addBehavior\', getData: addBehaviorKey},//IE是否指定AddBehavior
	{key: \'openDatabase\', getData: openDatabaseKey},//是否有打开的DB
    {key: \'cpuClass\', getData: cpuClassKey},//浏览器系统的CPU等级
    {key: \'platform\', getData: platformKey},//运行浏览器的操作系统和(或)硬件平台
    {key: \'doNotTrack\', getData: doNotTrackKey},//do-not-track设置
    {key: \'plugins\', getData: pluginsComponent},//浏览器的插件信息
    {key: \'canvas\', getData: canvasKey},//使用 Canvas 绘图
    {key: \'webgl\', getData: webglKey},//WebGL指纹信息
    {key: \'webglVendorAndRenderer\', getData: webglVendorAndRendererKey},//具有大量熵的WebGL指纹的子集
    {key: \'adBlock\', getData: adBlockKey},//是否安装AdBlock
	{key: \'hasLiedLanguages\', getData: hasLiedLanguagesKey},
	//用户是否篡改了语言
	{key: \'hasLiedResolution\', getData: hasLiedResolutionKey},
	//用户是否篡改了屏幕分辨率
	{key: \'hasLiedOs\', getData: hasLiedOsKey},
	//用户是否篡改了操作系统
	{key: \'hasLiedBrowser\', getData: hasLiedBrowserKey},
	//用户是否篡改了浏览器
	{key: \'touchSupport\', getData: touchSupportKey},//触摸屏检测和能力
	{key: \'fonts\', getData: jsFontsKey, pauseBefore: true},
	//使用JS/CSS检测到的字体列表
	{key: \'fontsFlash\', getData: flashFontsKey, pauseBefore: true},
	//已安装的Flash字体列表
	{key: \'audio\', getData: audioKey},//音频处理
	{key: \'enumerateDevices\', getData: enumerateDevicesKey}
	//可用的多媒体输入和输出设备的信息。
	  ]

 

原文链接:https://blog.csdn.net/qq_29169813/java/article/details/86672205

 

版权声明:本文为yangfei123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yangfei123/p/13072134.html