Fingerprintjs2:一款开源设备指纹采集器,pc浏览器唯一id

2019-01-14 19:25:26

Fingerprintjs2是一款开源的设备指纹采集器。最初的fingerprintjs库创建于2012年,但是由于新版本的开发很难保持向后兼容,因此Fingerprintjs2项目中增加了很多的新内容。

该项目将更多、更有效的来源用于指纹识别,并且可配置,也就是说用户可以选择性地开启其中的选项。该项目还将重点关注IE插件,尤其是在中国流行的QQ、Baidu等。另外,该项目使用了semver(语义化的版本控制系统)。 

安装

使用CDN在线获取:

https://cdnjs.com/libraries/fingerprintjs2

使用bowerinstall命令进行安装:

bowerinstall fingerprintjs2


使用npminstall命令进行安装:

npm installfingerprintjs2


用例

newFingerprint2().get(function(result, components){  console.log(result); //a hash, representingyour device fingerprint  console.log(components); // an array of FPcomponents});

用户可以传递一个带有如下选项的对象:

varoptions = {swfPath: '/assets/FontList.swf', excludeUserAgent: true};newFingerprint2(options).get(function(result){  console.log(result);});

选项的完整列表

由于Flash在隐身模式下是不工作的,因此默认情况下,Flash字体枚举是禁用的,并且使用JS代码获取可用的字体列表。但是,当检测到“excludeJsFonts: true”选项时该库会开始使用Flash。

如果要使用Flash字体枚举,请确保swfobject可用,否则该库会直接跳过Flash部分。

为了确保用户转动设备时,指纹识别的一致性,detectScreenOrientation选项默认情况下为true。

所有的指纹资源都是默认可用的,因此用户不需要去特别配置。

newFingerprint2().get(function(result, components){  // this will use all available fingerprintingsources  console.log(result);  // components is an array of allfingerprinting components used  console.log(components);});

查看本地指纹资源

用户可以通过启动网络服务器并浏览index.html页面来查看本地指纹资源。由于Flash的ExternalInterface安全限制,index.html页面不能从本地文件系统加载。

通过以下方式开启网络服务器:

Ruby1.9.2+

ruby-run -e httpd . -p 8080


Python2.x

python-m SimpleHTTPServer 8080


Python3.x

python-m http.server 8080


PHP5.4+

php -S0.0.0.0:8080


指纹资源列表

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、触摸屏检测和能力

一般情况下,JS字体检测最多可检测65种已安装的字体。用户可通过使用extendedFontList: true选项提升字体检测能力,可提升到500种。

更多指纹资源

1、多显示器检测

2、Silverlight集成

3、Flash linux内核版本

4、内部哈希表执行检测

5、WebRTC指纹

6、Math常数

7、可访问性指纹

8、相机信息

9、DRM支持

10、加速器支持

11、虚拟键盘

12、手势列表(触摸设备)

13、像素密度

14、视频和音频编解码器的可用性

FontList.swf文件的重新编译

1、下载Adobe Flex SDK

2、解压,向$PATH变量中添加bin/目录

3、运行make命令




  • 2018-12-13 17:14:41

    Android安全开发之浅谈密钥硬编码

    在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码、文件中,这样做会引起很大风险。信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文;对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名。

  • 2018-12-13 17:17:02

    轻松实现动态获取Android手机CPU架构类型

    .so文件是unix的动态连接库,是二进制文件,作用相当于windows下的.dll文件。 他使用了C/C++代码编写的可以操作硬件比java更高级的 底层代码,执行速度和效率比其他语言要高。 在Android中调用动态库文件(*.so)都是通过jni的方式。

  • 2018-12-13 22:48:48

    Android MultiDex实践:如何绕过那些坑?

    MultiDex, 顾名思义,是指多dex实现,大多数App,解压其apk后,一般只有一个classes.dex文件,采用MultiDex的App解压后可以看到有classes.dex,classes2.dex,… classes(N).dex,这样每个dex都可以最大承载65k个方法,很大限度地缓解了单dex方法数限制。

  • 2018-12-14 13:32:18

    解决chrome调试手机模式没有鼠标问题

    F12后,切换到手机模式,方向没有鼠标,这对于调试前端页面来说无疑是一大难题,看不见只能盲点, 以为是浏览器问题,清理缓存,升级浏览器,清除插件等都不好使。 后来查到资料说是显卡问题。果然还真是显卡问题。

  • 2018-12-14 17:12:51

    Android APP适配全面屏手机的技术要点

    全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。从字面上解释就是,手机的正面全部都是屏幕,四个边框位置都是采用无边框设计,追求接近100%的屏占比。但受限于目前的技术,还不能做到手机正面屏占比100%的手机。现在业内所说的全面屏手机是指真实屏占比可以达到80%以上,拥有超窄边框设计的手机。

  • 2018-12-14 17:15:50

    Android适配刘海屏沉浸式状态栏的一些坑

    18年简直是刘海元年,所有手机都在跟风刘海屏,甚至每个厂商还有自己的一套适配规范。我的初始需求很简单,就是做一个全屏显示的页面,一般情况下只需要开启Android规范的全屏模式就好:

  • 2018-12-16 12:12:12

    android:windowSoftInputMode属性具体解释

    android:windowSoftInputMode属性一共同拥有9个取值。各自是: stateUnspecified,stateUnchanged。stateHidden,stateAlwaysHidden。stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize。adjustPan。