⌘K 切换工具
PRIVACY

浏览器指纹测试

显示浏览器的唯一指纹信息。

local
browser-fingerprint

These attributes are read locally to show what your browser reveals. Nothing is sent or stored.

§01 关于此工具

概述

基于 cookie 的追踪必须在你的设备上存点东西,这意味着你能看见它、拒绝它、删除它。 指纹技术什么都不用存:网站读取你的浏览器按设计就会暴露的一批属性,把它们组合起来, 再把这个组合当作标识符。

这个页面展示其中的十一项属性。每一项都用普通的浏览器 API 读取,没有任何一项会弹出 权限请求,也没有任何一项被 cookie 同意横幅所覆盖。

使用方法

打开页面即可。这些值在加载时读取。把它们跟同一台机器上的另一个浏览器、或者另一台 设备上的同一个浏览器对比,就能看出哪些部分标识机器、哪些部分标识浏览器。

每项属性各自贡献了什么

属性它能缩小什么
User-Agent浏览器、主版本号、OS 系族。各家浏览器正在有意逐步削减它
Language首选语言和地区。在非常见区域设置下具有很强的识别性
PlatformOS 系族。在现行浏览器中正被冻结或移除
Timezone地区。与语言组合后常常能缩小到一个国家
Screen分辨率和设备像素比。不常见的分辨率识别性极高
Color depth几乎总是 24-bit。几乎不贡献任何信息
CPU cores硬件档次。常见取值只有很小的一组
Device memory硬件档次,由浏览器粗粒度分桶后给出
Touch points区分触屏设备与桌面设备
Cookies enabled一个比特,而且答案几乎总是「是」
Canvas signatureGPU、驱动、已安装字体和栅格化。这里单项识别性最强的值

值得注意的规律是:越是能轻易读到的属性,贡献越小;而唯一那个必须真的渲染一遍才能 得到的属性,贡献最大。这就是为什么商业指纹服务真正依赖的是 canvas、WebGL 和音频 指纹。

属性是怎么变成身份的

每项属性都在切分人群。如果全部访客里有一半用 Windows,那么知道你的平台就把候选者 减半——一个比特的信息。色彩深度几乎切不掉任何人,所以它携带的信息接近零。而一个 canvas 签名能把人群切成上千组,因此它携带的比特很多。

比特是可以相加的。大约 33 个比特就足以在约 86 亿人中区分出一个人,而一个浏览器暴露 的总量远超 33 个比特——这既是指纹技术之所以有效的原因,也是为什么去掉任何单独一项 属性都收效甚微。

这还解释了一个反直觉的结果:把浏览器弄得与众不同,反而让你更容易被识别。一个罕见 的 User-Agent、一个不常见的分辨率、或者一个报出不可能组合的伪装扩展,都是在增加比特 而不是减少比特。融入人群胜过标榜特殊。

真正有效的对策

按效果排序,实话实说:

  1. Tor Browser。 它把泄露最多的那些值统一化——窗口尺寸被量化,canvas 读取被 阻止或需要确认,时区固定为 UTC。它的用户是刻意做到彼此完全一致的。
  2. 开启保护的 Safari 和 Firefox。 两者都会随机化或阻止 canvas 和音频读取, Safari 还会报告一个精简后的 User-Agent。两者都没有消除这个攻击面,但都去掉了 价值最高的那部分比特。
  3. 除此之外基本没别的。 屏蔽 cookie、隐私浏览、清除历史,针对的全都是存储,而 这些值一个都不存储。

伪装类扩展值得单独点出来,因为它们经常起反作用。从一台 canvas 输出看起来像 macOS 的机器上报告一个 Windows 的 User-Agent,制造出的这种不一致本身就是显著特征。

示例

  • 让别人明白 cookie 横幅并不是故事的全部。 在屏蔽 cookie 的状态下把这个页面给 他们看。
  • 理解只影响部分用户的 bug。 ScreenLanguageTimezone 是绝大多数「只在 我这台机器上出现」的布局与日期格式反馈背后的变量。
  • 检验你的隐私配置究竟改变了什么。 分别在启用和不启用你那些扩展与设置的情况下 对比这些值,注意有多少项根本没动。
  • 解释为什么封禁跟着你走。 在你换了 IP、清空了配置文件之后,网站正是靠指纹认出 回访者的。

说明

浏览器不肯提供的值会显示为 ,而不是猜一个。deviceMemory 在 Firefox 和 Safari 上按设计就不可用,platform 则正在各家浏览器中被冻结或移除,所以这里的一道横线是 浏览器在保护你,不是功能失败。

canvas 签名取的是编码后图像数据的最后十六个字符,不是密码学哈希。它在同一台设备上 稳定,在不同设备之间不同;它在这里只是对该技术的一个示意,不是什么规范化标识符。 一个会随机化 canvas 读取的浏览器每次访问都会给出不同的值——那正是防御在起作用。

读取这些属性对正当用途来说同样是不可避免的——响应式布局需要屏幕尺寸,日期格式化需要 时区。问题不在于这些 API 存在;问题在于「为了识别而读取」与「为了渲染而读取」在技术 上无法区分。

这里有两类属性的读取方式与其余不同。Canvas signature 必须真的渲染,因此一个阻止或 随机化 canvas 读取的浏览器会改变它;其余都是普通的属性读取,除非破坏正当用途,否则 无法拦截。正是这种不对称,让浏览器的防御把火力放在 canvas、音频和 WebGL 上,而不是 去试图隐藏屏幕尺寸。

同一个问题的网络那一半,见 IP 查询——地址和指纹是互补的,一个同时 拿到两者的网站,并不需要其中任何一个保持稳定。

FAQ
我的指纹会被发送或存储吗?
不会。每个值都是在页面内通过浏览器 API 读取并直接渲染到屏幕上的。没有网络请求,也不向任何存储写入任何东西。这个页面的意义是让你看到网站能采集什么,而不是去采集它。
这些值能识别出我本人吗?
单独任何一项都不能。你的色彩深度几乎跟所有人一样。真正起识别作用的是组合——每多一项属性就把候选人群缩小一层,凑够足够多项之后,就会产生一个只有你、或者极少数人才持有的值。
屏蔽 cookie 能挡住它吗?
挡不住,而这正是指纹技术存在的理由。这些属性一项都不存放在你的设备上,所以根本没有可清除、可拒绝的东西。网站每次访问都重新读一遍,然后认出这个组合。
canvas 签名是什么?
工具在一个离屏 canvas 上绘制文字和一个 emoji,然后取所得图像数据的尾部。具体像素取决于你的 GPU、显卡驱动、已安装字体和栅格化设置,因此两台看起来完全一样的设备也会得到不同的值。
隐私浏览有用吗?
它清除的是存储,不是特征。一个隐私窗口的屏幕尺寸、时区、CPU 核心数和 canvas 输出跟普通窗口完全一样。它能挫败 cookie 追踪,对指纹几乎毫无作用。