js获取浏览器指纹
Canvas指纹法
来源:https://www.cnblogs.com/leijing0607/p/8044218.html
从根本上来说,每一种浏览器都会使用不同的图像处理引擎,不同的导出选项,不同的压缩等级,所以每一台电脑绘制出的图形都会有些许不同,这些图案可以被用来给用户设备分配特定编号(指纹),也就是说可以用来识别不同用户。
function bin2hex(s) {var i, l, o = '',n;s += '';for (i = 0, l = s.length; i < l; i++) {n = s.charCodeAt(i).toString(16);o += n.length < 2 ? '0' + n : n;}return o;
}function getUUID(domain) {var canvas = document.createElement('canvas');var ctx = canvas.getContext("2d");var txt = domain;ctx.textBaseline = "top";ctx.font = "14px 'Arial'";ctx.textBaseline = "tencent";ctx.fillStyle = "#f60";ctx.fillRect(125,1,62,20);ctx.fillStyle = "#069";ctx.fillText(txt, 2, 15);ctx.fillStyle = "rgba(102, 204, 0, 0.7)";ctx.fillText(txt, 4, 17);var b64 = canvas.toDataURL().replace("data:image/png;base64,","");var bin = atob(b64);var crc = bin2hex(bin.slice(-16,-12));return crc;
}console.log(getUUID("https://www.baidu.com/"));
测试结果表明,同一浏览器访问该域时生成的CRC校验码总是不变。可以简单理解为同样的HTML Canvas元素绘制操作,在不同的操作系统不同的浏览器上,产生的图片内容其实是不完全相同的。出现这种情况可能是有几个原因:
- 在图片格式上,不同web浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。
- 在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。
- 即使是相同的绘图操作,最终产生的图片数据在hash层面上依然是不同的。
笔者测试数据如下:
- PC:Chrome浏览器、Edge浏览器、遨游浏览器; Chrome浏览器和遨游浏览器结果一样
- 安卓移动端:Chrome浏览器
- iOS端:Safari浏览器、微信; Safari浏览器和微信结果一样
笔者测试结论:还是会出现结果一样的情况,而且最终生成的uuid位数较短也增加了出现相同的几率。该方法不可取!!!
成熟框架 fingerprintjs
fingerprintjs,笔者是在这个网站知晓的:https://q.shanyue.tech/fe/js/28,里面有很大大厂前端面试的问题,可以深入学习用。
官方给的示例:
<script>// Initialize the agent at application startup.// If you're using an ad blocker or Brave/Firefox, this import will not work.// Please use the NPM package instead: https://t.ly/ORyXkconst fpPromise = import('https://openfpcdn.io/fingerprintjs/v4').then(FingerprintJS => FingerprintJS.load())// Get the visitor identifier when you need it.fpPromise.then(fp => fp.get()).then(result => {// This is the visitor identifier:const visitorId = result.visitorIdconsole.log(visitorId)})
</script>
虽然注释写的是在Firefox中有可能不工作,但是笔者测试PC上Firefox正常工作。
在其API文档中有提供其它方式的植入示例,比如浏览器<script>标签、TS的方式。
相关文章:
js获取浏览器指纹
Canvas指纹法 来源:https://www.cnblogs.com/leijing0607/p/8044218.html 从根本上来说,每一种浏览器都会使用不同的图像处理引擎,不同的导出选项,不同的压缩等级,所以每一台电脑绘制出的图形都会有些许不同…...
乐尚代驾的项目问题
订单状态如果在流转的过程中卡住了,怎么办? 卡住的原因有可能是: 网络问题 网络不稳定或中断可能导致订单状态更新的请求无法及时发送或接收。例如,司机端在更新代驾车辆信息时,如果网络出现故障,可能无法…...
uniapp app.onshow 和 onMounted一样用吗
在uni-app中,onShow和onMounted并不完全相同,它们分别属于应用生命周期和组件生命周期。 应用生命周期中的onShow 在uni-app中,onShow是应用生命周期的一部分,它会在应用启动或从后台进入前台时触发。这意味着它不仅仅局限于页…...
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
源码地址:https://download.csdn.net/download/2302_79553009/89933699 项目简介 本项目旨在构建一个基于MBTI(迈尔斯-布里格斯性格分类指标)理论的在线平台——“16Personalities”。该平台利用PHP、MySQL、JavaScript等技术栈开发…...
【问题解决】连接mysql时报错caching_sha2_password can not load
一, 问题 在连接Mysql时报错, caching_sha2_password can not load 二,问题原因 报错信息 "caching_sha2_password can not load" 通常出现在尝试连接到使用 MySQL 8.0 或更高版本的数据库时,因为从 MySQL 8.0 开始&a…...
【瑞吉外卖】-day01
目录 前言 第一天项目启动 获取资料 创建项目 编辑 连接本地数据库 连接数据库 修改用户名和密码 编辑创建表 创建启动类来进行测试 导入前端页面 创建项目所需目录 检查登录功能 登录界面 登录成功 登录失败 代码 退出功能 易错点 前言 尝试一下企业级项…...
钉钉与金蝶云星空数据集成:提高企业付款申请单处理效率
钉钉数据集成到金蝶云星空:付款申请单的自动下推生成 在企业日常运营中,如何高效地管理和处理付款申请单是一个关键问题。为了提升这一流程的效率,我们采用了轻易云数据集成平台,将钉钉中的付款申请单数据无缝对接到金蝶云星空系…...
GIT使用list
清空当前commit区 方法 1:软重置到初始状态 如果希望保留文件内容,但清空所有 commit 历史,可以使用以下命令: git reset --soft $(git rev-list --max-parents0 HEAD)解释: --soft 表示重置 commit 历史ÿ…...
JavaSE:数组深入学习与复习
学习参考 1、可变参数传递 数组可以是int等基本数据类型,也可以是String等引用类型 package com.test;public class Main {public static void main(String [] args){int [] a {1,2,3,4,5};test(78,90,12,34,56,78,90,12,34,56,78);}public static void test(i…...
Redis 事务 总结
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 事务 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 事务 & 总结》(学习总结/最新最准/持续更新)《Redis & 事务…...
go sdk的安装或者升级
背景 由于 go 语言的官方sdk还在不断的更新迭代中,有的时候相对应的生态相关的依赖包也在不断的升级,如果很长一段时间不升级自己的本地的go sdk 那么就有可能在拉取代码的时候出现错误,因此有的时候可能需要我们适当的升级下自己的sdk&…...
mongo实操笔记
这个链接我用了其在Windows下的下载安装 是可以的 ,不过我太懒了,没有弄成自启动 Windows安装MongoDB_mongodb windows安装-CSDN博客 下面这个链接就更好了,我用了其与springboot整合的测试。可以直接操作mongodb了。 SpringBoot整合Mongo…...
前端算法:树(力扣144、94、145、100、104题)
目录 一、树(Tree) 1.介绍 2.特点 3.基本术语 4.种类 二、树之操作 1.遍历 前序遍历(Pre-order Traversal):访问根节点 -> 遍历左子树 -> 遍历右子树。 中序遍历(In-order Traversal…...
深度学习速通系列:如何使用bert进行超长中文文本命名实体识别
要将超长中文文本按最大 BERT 输入长度进行分割,并使用 bert-chinese-ner 模型进行命名实体识别,可以遵循以下步骤。以下是一个 Python 代码示例,利用 Hugging Face 的 transformers 库来实现: 安装必要的库 如果你还没有安装 Hu…...
【感知模块】深度神经网络实现运动预测
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言运动预测(Motion Prediction)感知中的运动预测(深度神经网络)前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! …...
智能优化算法-蝗虫优化算法(GOA)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 蝗虫优化算法 (Grasshopper Optimization Algorithm, GOA) 是一种基于群体智能的元启发式优化算法,由Saremi等人于2017年提出。GOA模拟了蝗虫群的觅食、迁徙和社会互动行为,用于解决复杂…...
TVM前端研究--Relay
文章目录 深度学习IR梳理1. IR属性2. DL前端发展3. DL编译器4. DL编程语言Relay的主要内容一、Expression in Relay1. Dataflow and Control Fragments2. 变量3. 函数3.1 闭包3.2 多态和类型关系3.3. Call4. 算子5. ADT Constructors6. Moudle和Global Function7. 常量和元组8.…...
STM32外设应用
STM32是基于ARM Cortex-M系列内核的微控制器,具有高性能、低功耗和丰富的外设资源。其广泛应用于物联网、工业控制、智能家居和嵌入式系统等领域。本文将简要介绍STM32常用外设的功能及应用实例,帮助大家更好地理解和使用STM32外设。 1. GPIO࿰…...
Docker 部署 Jaeger
Jaeger 的主要作用如下: 分布式追踪 Jaeger 是一个开源的分布式追踪系统,用于监控和排查微服务架构中的复杂问题。它可以跟踪请求在不同服务之间的传播路径,帮助开发者理解系统中各个组件之间的调用关系。 性能分析 通过收集和分析请求的执行…...
使用Python和OpenCV实现火焰检测
使用Python和OpenCV实现火焰检测 项目解释: 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述: 导入库:代码首先导入必要的库: cv2:用于图像和视频处理…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
Electron简介(附电子书学习资料)
一、什么是Electron? Electron 是一个由 GitHub 开发的 开源框架,允许开发者使用 Web技术(HTML、CSS、JavaScript) 构建跨平台的桌面应用程序(Windows、macOS、Linux)。它将 Chromium浏览器内核 和 Node.j…...
