前端使用fingerprintjs2获取浏览器指纹

简介: 前端使用fingerprintjs2获取浏览器指纹

什么是浏览器指纹

浏览器指纹我们可以理解成是一个用户设备的浏览器的唯一id(有点类似手机设备的IMEI),通过浏览器指纹,我们可以做一些埋点操作或者是鉴权,辨别是否是同一用户,其是否有更换设备(更换浏览器)等


什么是fingerprintjs2

fingerprintjs2是通过设备浏览器信息获取浏览器指纹的插件(官方宣称其识别精度达到99.5%),详细了解可查看fingerprintjs2官方文档


如何使用fingerprintjs2

以VUE中使用为例

安装

npmifingerprintjs2-S
  • 您不应在页面加载时或加载后直接运行指纹。 而是使用setTimeout或requestIdleCallback将其延迟几毫秒,以确保指纹一致。
  • 组件中(此例默认以浏览器所有的配置信息生成浏览器指纹)
<template><divid="app"></div></template><script>importFingerprint2from'fingerprintjs2'; // 引入fingerprintjs2exportdefault {
name: 'App',
components: {
  },
data() {
return {
    };
  },
asynccreated() {
// 您不应在页面加载时或加载后直接运行指纹。 而是使用setTimeout或requestIdleCallback将其延迟几毫秒,以确保指纹一致。if (window.requestIdleCallback) {
requestIdleCallback(() => {
this.createFingerprint();
      });
    } else {
setTimeout(() => {
this.createFingerprint();
      }, 500);
    }
  },
methods: {
// 创建浏览器指纹createFingerprint() {
// 浏览器指纹constfingerprint=Fingerprint2.get((components) => { // 参数只有回调函数时,默认浏览器指纹依据所有配置信息进行生成constvalues=components.map(component=>component.value); // 配置的值的数组constmurmur=Fingerprint2.x64hash128(values.join(''), 31); // 生成浏览器指纹console.log(components);
console.log(values);
console.log(murmur);
localStorage.setItem('browserId', murmur); // 存储浏览器指纹,在项目中用于校验用户身份和埋点      });
  },
  },
};
</script><stylelang="less"></style>

自定义选择浏览器的部分配置信息生成浏览器指纹

  • 浏览器可选配置信息如下
varcomponents= [
    {key: 'userAgent', getData: UserAgent},//用户代理    {key: 'webdriver', getData: webdriver },//网页内驱动软件    {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} //可用的多媒体输入和输出设备的信息。]
  • 组件中选择浏览器部分配置信息作为参数获取浏览器指纹
<template><divid="app"></div></template><script>importFingerprint2from'fingerprintjs2'; // 引入fingerprintjs2exportdefault {
name: 'App',
components: {
  },
data() {
return {
    };
  },
asynccreated() {
// 您不应在页面加载时或加载后直接运行指纹。 而是使用setTimeout或requestIdleCallback将其延迟几毫秒,以确保指纹一致。if (window.requestIdleCallback) {
requestIdleCallback(() => {
this.createFingerprint();
      });
    } else {
setTimeout(() => {
this.createFingerprint();
      }, 500);
    }
  },
methods: {
// 创建浏览器指纹createFingerprint() {
// 选择哪些信息作为浏览器指纹生成的依据constoptions= {
fonts: {
extendedJsFonts: true,
        },
excludes: {
audio: true,
userAgent: true,
enumerateDevices: true,
touchSupport: true,
        },
      };
// 浏览器指纹constfingerprint=Fingerprint2.get(options, (components) => { // 参数只有回调函数或者options为{}时,默认浏览器指纹依据所有配置信息进行生成constvalues=components.map(component=>component.value); // 配置的值的数组constmurmur=Fingerprint2.x64hash128(values.join(''), 31); // 生成浏览器指纹console.log(components);
console.log(values);
console.log(murmur);
localStorage.setItem('browserId', murmur); // 存储浏览器指纹,在项目中用于校验用户身份和埋点      });
  },
  },
};
</script><stylelang="less"></style>
目录
相关文章
|
2月前
|
编解码 缓存 安全
用指纹浏览器为什么要搭配代理IP
指纹浏览器结合代理IP能有效提升网络隐私与安全。指纹浏览器通过生成独特用户标识防止追踪,但高级追踪技术仍可能暴露信息。代理IP可隐藏真实IP,增加匿名性,规避网络限制,并在指纹检测中混淆身份,增强安全。代理IP还能加速网络访问并提高稳定性。然而,选择可靠代理IP服务并遵守法规至关重要。
|
2月前
|
前端开发
调试前端时,在浏览器上修改参数并重新调用接口
有时候我们的页面点击过了,但是接口出问题,想修改参数再调用一次,一般是用apiPost工具把接口复制,再加上token和参数,但是这样非常的效率比较低。
45 0
|
6月前
|
前端开发
前端页面调试小技巧(谷歌浏览器)
前端页面调试小技巧(谷歌浏览器)
38 0
|
7月前
|
Web App开发 前端开发 安全
前端小知识之【浏览器内核】
前端小知识之【浏览器内核】
56 0
|
7月前
|
Web App开发 移动开发 JavaScript
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
180 0
|
7月前
|
Web App开发 前端开发 JavaScript
|
27天前
|
监控 前端开发 JavaScript
如何使用浏览器调试前端代码?
【4月更文挑战第11天】前端开发中,浏览器调试是关键技能,能提升代码质量。本文介绍了如何使用浏览器的调试工具:1) 打开调试窗口(F12或右键检查);2) Elements标签页检查DOM结构和样式;3) Console调试JavaScript,查看日志和错误信息;4) Sources设置断点调试JS文件;5) 利用Network、Performance和Memory等标签页优化性能。熟悉调试工具、利用日志和错误信息能有效定位问题,提高开发效率。
47 7
|
2月前
|
前端开发 JavaScript 程序员
推荐给前端程序员的5款浏览器插件
推荐给前端程序员的5款浏览器插件
|
2月前
|
SQL 存储 JavaScript
前端浏览器调试详解版
前端浏览器调试详解版
60 0
|
3月前
|
消息中间件 JavaScript 前端开发
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)