浏览器指纹测试

浏览器指纹是每个网站无需询问就能读到的信号组合:你的 IP 地址及其指向、你的时区和语言、你的屏幕、显卡、字体和一组安静的偏好。本测试在你自己的浏览器里读出全部信号,写成网站在第一秒看到的画像——然后检查这个故事是否自洽。先看网站到底知道你什么,用VPN 泄漏与伪装检查核对伪装,并了解隐私测试如何不保存任何数据。如果你处理的是抓包文件,HAR 分析器同样在本地读取。

最后更新:

你的画像——以网站的视角

你的指纹

每个指纹在你访问的每个网站上都相同——这正是指纹之为指纹的原因。VPN 改变你的地址;它改变不了其中任何一个。

这个故事自洽吗?

这些检查把各层互相比较。不一致本身不证明什么——旅行者和远程办公者会诚实地不一致——但这正是伪装检测所寻找的。

等你点击才运行的测试

本节在你按下按钮之前什么都不会运行。每个测试都要求某种网站只能开口索要的东西——追踪器脚本、精确位置、运动传感器——因此你可以在授权之前先看清请求。

测试追踪器拦截

以普通页面的方式加载七个最知名的追踪器脚本,并报告哪些被你的浏览器或拦截器挡下。本页除了脚本请求本身,不会向这些服务发送任何东西。

测试精确位置

像网站一样向浏览器索要你的精确位置。浏览器会先询问你;结果只显示在这里,不发送到任何地方。

测试运动传感器

监听三秒钟网站在某些设备上能读到的运动与方向传感器。在某些系统上,浏览器会先请求许可。

每一个信号,逐个来看

网站能读到的每个值,按层分组,并附暴露它的机制。“不透露”意味着你的浏览器扣留或粗化了该值——这本身就是一项隐私功能。

你的配置有多常见?

经你许可,本页会把少数值(操作系统家族、浏览器家族、GPU 字符串、时区、语言、屏幕尺寸和三个指纹)发送给一个匿名计数器,返回今天的运行中有多少与每个值相同。不发送地址、完整信号表或任何标识符,计数器只保留计数。

本页的一切都在你的浏览器中读取。唯一的服务器请求只有三个具名端点——/api/check/whoami(我们的服务器所见)、/api/check/etag(识别检查)和 /api/check/fingerprint-count(匿名计数)——你在这里看到的任何内容都不会存储在服务器上。

本测试如何工作

顶部的画像由下方列出的同一批读数组装而成,其中每个填入的短语都会标明它来自哪些信号——把鼠标悬停或轻点短语即可看到来源。连接层来自我们自己的检查端点,它报告服务器在你的浏览器连接时所见:地址、其地理位置与网络,以及连接的 TLS 与 HTTP 版本。三个外部追踪端点(Cloudflare、ChatGPT 和 Claude)显示其他网络所见的地址,分流隧道和中继就是这样显形的。读取 WebRTC 是因为它能暴露连接层隐藏的地址;DNS 回显则显示哪个解析器为你应答、它看起来位于何处。

设备层用任何页面都能使用的普通 JavaScript API 读取:用户代理与客户端提示、屏幕与窗口几何、WebGL 渲染器字符串、Canvas 与音频渲染探针、字体测量列表、编解码器支持和偏好媒体查询。这一切都不需要许可弹窗,而展示它的意义正在于此:这就是“无需询问”在实践中的样子。当浏览器扣留或粗化某个值时,该行会如实说明,而不是猜测。

本测试刻意不做什么

它不猜你的年龄,因为浏览器暴露的任何东西都支撑不了这种猜测——广告画像里自信的年龄段来自跨站追踪的行为,而不是设备读数。它不保存你的画像:读数只存在于本页、你的浏览器中,关页即消失。本地唯一植入的是持久化一节所述的识别标记——ETag 检查、存储痕迹和上次访问记录——上面的按钮可以删除它们。匿名计数器在你允许时只接收那里列出的粗粒度值,并且只保留计数,从不保留访客表。

把不一致当作信息,而不是判决。时区与 IP 地址不一致,可能意味着 VPN、一台在另一个国家装机的公司笔记本,或一部设为家乡时间的旅行者手机。这些检查存在,是因为伪装工具改了一层却忘了其他层;把所有层并排放在一起,你才能判断自己的配置是否讲了你想讲的故事。

关键术语

IP 地址你的连接向每个服务器出示的地址。它大致定位你的网络出口,并指出拥有该地址段的机构。
浏览器指纹由许多设备与浏览器信号计算出的稳定标识符。它能在删除 Cookie 后存活,因为你的机器上不需要存储任何东西。
Canvas浏览器用你的 GPU、驱动和字体渲染的绘图表面。细微的渲染差异使结果可测量地区别开来。
WebRTC浏览器的实时通信栈。它的 ICE 协商能揭示普通连接视图隐藏的公网与本地地址。
ETag / 缓存 ID服务器随资源发送的验证器。如果你的浏览器之后返回同一个标签,服务器无需任何 Cookie 就能识别这个浏览器。
匿名计数器只统计某个值出现次数、不记录提交者的计数。它们回答“这有多常见?”,无法列出数字背后的访客。
全球隐私控制一种浏览器信号(navigator.globalPrivacyControl),声明你反对出售或共享你的数据。在某些司法管辖区具有法律效力。

常见问题

这个页面到底做什么?

它在你的浏览器中读取任何网站都能读到的信号——连接、设备、图形、偏好和持久化标记——并以画像、信号表、四个指纹和一组一致性检查的形式展示。唯一的服务器联系是上方隐私行中具名的三个端点,外加网络一节使用的外部追踪与 DNS 回显服务。另有三个测试(追踪器、精确位置、运动传感器)只在你按下它们的按钮时运行。它计算的指纹是稳定信号组合的哈希,每次访问重新计算——见上方关键术语。

城市和家乡猜测是怎么来的?

城市是服务器所见 IP 地址的地理定位——你的网络出口所在城市,可能是你运营商的网关而不是你的家。家乡猜测是另一回事,也更弱:它把你浏览器的语言列表与时区结合,给出这些设置最常属于的国家。两者不一致时,一致性检查会指出;旅行、远程办公和 VPN 都会产生诚实的不一致。

为什么测试猜不出我的年龄?

因为没有任何暴露的信号携带它。浏览器不报告出生日期,设备型号、屏幕尺寸或已装字体也无法以任何站得住脚的方式映射到年龄。广告画像上的年龄段是从行为推断的——你在许多网站上读什么、看什么、买什么——而不是从你的设备测量的。一个打印出年龄的测试只会是在编造,所以本测试直截了当地说:年龄无法从这些读数中得知。

你们会保存这些吗?

不会。画像和信号表只存在于你浏览器中的本页里。我们的 whoami 端点回答服务器所见,不保存任何东西;etag 端点设置一个识别标签,让页面向你展示 ETag 追踪如何工作,该标签识别的是浏览器而不是人;fingerprint-count 端点只保留粗粒度值的匿名计数,你可以退出——全球隐私控制会自动让你退出。具名的外部服务(Cloudflare、ChatGPT、Claude 和 DNS 回显)看到的与你正常访问它们时产生的请求相同。按钮门控的测试只在你点击时运行,结果只留在本页。

为什么有些行写着“不透露”?

因为浏览器扣留、粗化或尚未实现该值。Safari 和 Firefox 在若干地方刻意比 Chromium 浏览器报告得少,某些值需要你的浏览器没有的 API,还有一些为空是因为底层功能已关闭。测试打印“不透露”,而不是用猜测填补空白——缺失的信号是一个真实的、且常常保护隐私的结果。