前端使用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月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
142 2
|
4月前
|
存储 缓存 前端开发
前端谷歌浏览器面版属性
【8月更文挑战第19天】前端谷歌浏览器面版属性
48 0
|
4月前
|
Web App开发 监控 前端开发
前端必备浏览器调试工具
【8月更文挑战第19天】前端必备浏览器调试工具
66 0
|
21天前
|
前端开发 JavaScript API
前端开发的秘密花园:这些技巧让你轻松应对各种浏览器兼容性问题!
【10月更文挑战第31天】前端开发是一个充满创意与挑战的领域,追求极致用户体验的同时,浏览器兼容性问题却时常阻碍我们前进。本文将介绍几种解决浏览器兼容性的最佳实践:使用CSS前缀、Autoprefixer工具、现代JavaScript特性与Babel转译、Polyfill与Feature Detection、响应式设计以及跨域问题处理。掌握这些技巧,助你轻松应对各种兼容性难题,创建更稳定、用户友好的网页应用。
28 3
|
21天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
29天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
63 1
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
491 1
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
2月前
|
缓存 前端开发 算法
浅谈【JavaScript】的浏览器指纹?
浅谈【JavaScript】的浏览器指纹?
21 0
|
4月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
53 1