fingerprint2 一款开源设备指纹采集器,在github上有7k的Star,看起来是那么的让人放心,今天聊一聊咱们在使用这个库中猜到的坑。html
本篇所讲的fingerprint2版本为2.0.6html5
生成的指纹大面积重复问题!!!git
生成的指纹大面积重复问题!!!es6
生成的指纹大面积重复问题!!!github
重要的问题讲三次。web
*获取不到值时返回: not available #获取不到值时返回: error算法
userAgent
:navigator.userAgentlanguage
: 语言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 SQLcpuClass
:返回浏览器系统的 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 请求可用媒体输入和输出设备的列表,例如麦克风,相机,耳机等x64hash128
方法,生成指纹x64hash128
算法是固定的,因此在key相同的时,生成的指纹是相同的。 fingerprint2在手机上重复的几率会更高,绝大多数用户不会去修改手机的配置,因此重复指纹主要在发生在同一型号的产品。sql
由于咱们主要面对移动终端用户,因此fingerprint2生成的值出现大面积重复(实践中的血与泪)。编程
key
中手动添加Ip
条件;Fingerprint2.get(components=>{
components.push({
key:'ip',
value:'192.168.1.1' //经过接口获取的到ip
});
let murmur = Fingerprint2.x64hash128(components.join(""), 31); //生成指纹信息
})
复制代码
加入ip信息,能够在很大程度上规避同型号的产品生成指纹信息相同的场景,切记不是百分之百。好比同一型号设备在同一wifi下生成的指纹信息也是有很大几率相同的。canvas
如今浏览器提供的设备信息愈来愈少,跟踪用户信息这只是一个思路,若是你们有奇技淫巧,欢迎交流。