总结自Github文档
使用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)
})
var options = {fonts: {extendedJsFonts: true}, excludes: {userAgent: true}}
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'
}
配置项名称 | 值 | 备注 |
---|---|---|
fonts.extendedJsFonts | : false 或 : true | 默认false检测65种字体,为true时将可检测字体增加到500,指纹持续时间从大约80-100毫秒增加到最多2000毫秒(冷字体缓存),移动设备慎用 |
fonts.userDefinedFonts | : [] (字体名称数组) : [ “Nimbus Mono “,”Junicode”,”Presto “] | 指定用户定义字体数组,以进一步增加字体指纹熵 |
fonts.swfContainerId | : fingerprintjs2 (flash字体名称) | 指定要用于swf嵌入的dom元素ID(flash字体) |
fonts.swfPath | : 'flash/compiled/FontList.swf' (路径) | 指定FontList.swf(flash字体)的路径 |
screen.detectScreenOrientation | : true:或 false | 默认值:true ,当用户旋转移动设备时确保指纹一致 |
plugins.sortPluginsFor | : [/palemoon/i] (决定插件顺序的正则表列表) | 默认值:[/palemoon/i] ,浏览器随机插件顺序。可以提供应该对插件进行排序的用户代理正则表的列表。 |
plugins.excludeIE | : true 或: false | 跳过IE插件枚举/检测 |
audio.excludeIOS11 | :true或:false | 默认值:true ,除非从用户交互(屏幕点击)开始,否则iOS 11会阻止音频指纹识别,从而阻止指纹识别过程完成。如果您确定从用户交互事件处理程序开始指纹识别,则可以在iOS 11上启用音频指纹识别。 |
audio.timeout | :1000 | 默认值1000 ,'audio’组件允许的最长时间ms |
fontsFlash | :true或:false | 要使用Flash字体枚举,请确保您具有可用的swfobject。如果不这样做,库将完全跳过Flash部分 |
extraComponents | :[] (额外key,getData组成的数组)或 :[{ key: 'customKey',getData: function (done, options) {done('infos')}}] 包含额外组件的数组。 | 自定义增加一些计算指纹的配置项值 |
preprocessor | :null或:function(key,value){...} | 使用每个组件值时调用的函数,可用于在计算指纹之前修改组件值。例如:从用户代理剥离浏览器版本。 |
excludes | :{} (包含所有):{ 'enumerateDevices': true,'pixelRatio': true,'doNotTrack': true,'fontsFlash': true} (默认配置) | 具有要排除的组件键的对象。空对象包含所有内容(本文档最后)。默认情况下,大多数组件都包含在内 |
常量 | NOT_AVAILABLE: ' not available ',ERROR : ' error ',EXCLUDED : ' excluded ' | Fingerprint2.NOT_AVAILABLE = ‘not available’,Fingerprint2.ERROR = ‘error’,Fingerprint2.EXCLUDED = ‘excluded’ 用于不可用,错误或排除组件值的常量。公开和可配置的。 |
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}
//可用的多媒体输入和输出设备的信息。
]