import FingerprintJS from '@fingerprintjs/fingerprintjs';
// 应用启动时初始化:Initialize an agent at application startup.
const fpPromise = FingerprintJS.load();
(async () => {
// Get the visitor identifier when you need it.
const fp = await fpPromise;
const result = await fp.get();
// This is the visitor identifier:
const visitorId = result.visitorId;
console.log(visitorId);
})();
本issue仅仅是学习时的记录: 原文章链接如下: https://juejin.cn/post/6994228279909548062
1. 隐私模式隐藏了什么
隐私浏览旨在避免在计算机上保留浏览会话的痕迹,主浏览窗口中的cookie、历史记录不会被保留,关闭隐私窗口时,历史记录、保存的密码以及在文本框中键入的内容都会被擦除。
隐私浏览可以保护你的隐私免受使用你计算机的其他人的侵害,并减少你在访问网站时透露的个人信息。但是!:隐私浏览不会让你匿名,也不会保护你免受监视和大型技术的窥探。
Chrome不会保存的信息:浏览记录、cookie和网站数据、在表单中填写的信息. 但是一下各方可能可以看到你的活动: 你所访问的网站、你的雇主或所在的学校、你的互联网服务提供商。
在隐身模式下,网站还是可以通过
关联其他信息
来发现你是谁,找出你的身份。这些关联信息比如你的IP地址、设备类型和浏览习惯等等.. 这些信息是不会隐藏的,FaceBook和Google等科技公司拥有大量用户的信息,通过连接这些点,就可以识别你的身份。2. 浏览器隐身模式真的可以隐身吗?
当然是不能
可以通过Nothing Private来验证.
这里会有一个固定的
finger
字段(应该是根据一些设备信息,ua等等生成的唯一标识),然后携带着你的finger
和输入的name
调用接口去保存起来. 接着我们进入到无痕模式,进入页面后就会调用一个接口传入finger
(与正常页面生成的那个finger一样!!!)与checked: 1
就会返回你之前输入的那个name
. 牛!综上:无痕模式并不能保护你的数据信息不被网站的服务器所获取!
隐私模式不能干什么
用户访问网站的过程
访问网站过程:
综上过程,有三种数据会被保存在用户的电脑上:浏览记录、临时文件、cookie及表单中填写的内容。有1~2种数据被保留在了网站那边,即:ip地址和用户填写的注册信息。
公司和学校建立的专有网络环境:对外只展示一个IP, 数据返回的时候再发送到响应的内网IP上,相当于一个单位有一个总的代理人,帮你们统一向外请求,请求回来以后再根据内网的ip返回对应的数据。
因此,如果雇主和学校有心想看的话是可以知道内网的某个人浏览了什么的。对于HTTP网站链接。雇主和学校可以完整地了解用户浏览了哪些网站,用户看了哪些内容,停留了多久,跳转了哪些网页...... 但是对于HTTPS网站,由于证书的存在和相应的验证机制,一般HTTPS解密(中间人攻击)很难发动,因此只能够了解到用户浏览了哪些网站而已。
链接不恰当的网络环境也会将自己的浏览记录暴露给他人,比如免费公用的WIFI。
浏览器隐身模式检测的博弈
漏洞1:检测用户是否是在Chrome的隐身模式下访问网站。这些网站可以尝试使用
FileSystem API
用于存储临时或永久文件的。这个API在隐身模式下被禁用,但在非隐身模式下存在,可以通过该差异进行检测(该漏洞现已修复):漏洞2: 基于文件系统大小检测隐身模式。Chrome 隐身模式和非隐身模式之间存储配额存在区别,如果临时存储配额<= 120MB,那么可以肯定地说它是一个隐身窗口,该方法通过
navigator.storage.estimate
API来进行获取和判断(截至现在该漏洞也已修复)。漏洞3: 通过访问时间检测隐身模式: 在读取和写入数据时,内存文件系统总是比磁盘文件系统快。研究员发现,隐身模式下,Chrome写API数据的操作总是要比正常模式下快,所以可以根据写入速度确定浏览器是否使用隐身模式。防止这种检测方法的唯一方式是让隐身模式和普通模式使用同样的存储介质,使得它们的写入速度一样。
Chrome开发人员的解决办法是: 只将元数据存储在内存中,并加密磁盘上的文件,来解决网站使用时间来区分内存和磁盘存储的风险,并消除基于文件系统大小和文件系统类型的差异。
这样的解决方案虽然可以抵御隐私模式检测,但是它会留下元数据:及时数据本身无法解密,它的存在也提供了隐身使用的证据。
隐私模式下如何标识用户
设备唯一标识和浏览器指纹
什么时候我们需要知道用户是在隐私模式下访问的:
在浏览器的隐身模式下,在无需用户额外授权的情况下,如何拿到用户的
设备唯一标识
呢?开发场景下,唯一的标识一个设备是一个基本功能,有很多的应用场景,如
软件授权
、软件License
、设备标识
、设备身份识别
等。怎样获取设备唯一标识,可能你会想到IMEI、Android ID、MAC地址,MAC地址,Android ID等都不是唯一的,且可能会被篡改。
下图是ios和android设备上拿到一些独有id的方法:
但是这些方法有的需要特许权限,有的需要原生开发的配合.
是否有只需要前端参与,也可以获得不错的准确率的唯一标识方案呢? --
浏览器指纹
登场。而浏览器指纹是指仅通过浏览器的各种信息,如 CPU 核心数、显卡信息、系统字体、屏幕分辨率、浏览器插件等组合成的一个字符串,就能近乎绝对定位一个用户,就算使用浏览器的隐私窗口模式,也无法避免。
这是一个被动的识别方式。也就是说,理论上你访问了某一个网站,那么这个网站就能识别到你,虽然不知道你是谁,但你有一个唯一的指纹,将来无论是广告投放、精准推送、安全防范,还是其他一些关于隐私的事情,都非常方便。
浏览器指纹的技术点和分类
Nothing Private 的识别原理
clienJS库
github地址: https://github.com/jackspirou/clientjsFingerprinJS库
: 是一个快速的浏览器指纹库,纯 JavaScript 实现,没有任何依赖。。默认情况下,使用 Murmur Hash 算法返回一个 32 位整数,Hash 函数可以很容易地更换。同时,他也很轻量:开启 gzipped 后只有 843 bytes,匿名识别网络浏览器的准确率高达 94%。