了解为什么基于指纹的访客ID能在清除Cookie、切换无痕模式和更换VPN后依然保持不变,以及背后的关键信号。
清空Cookie、打开隐私窗口、开启VPN——很多网站依然认得出你。这不是什么故障。持久访客ID通常根本不是存在你设备上的一个文件;它是每次访问时,根据你的浏览器和硬件特征重新计算出来的一个值,所以压根没有东西可删。
关键要点
- 持久访客ID通常是从稳定的设备/浏览器信号(Canvas、WebGL、字体、硬件)推导出来的,而不是存在Cookie里——所以"清除浏览数据"根本无从下手。
- 隐身/无痕窗口会清空本地存储,但不会触碰你的渲染指纹,所以网站依然能认出同一台设备。
- VPN改变的是你的IP地址,而不是浏览器或硬件——支撑这个ID的指纹并不会跟着IP一起变。
- 有些追踪脚本会故意把同一个ID复制到Cookie、localStorage、IndexedDB和基于缓存的存储里,这样删掉任何一份副本都不会重置它——这种手法被称为复生(respawning)。
- 你可以自己测试这种韧性:在清除数据、打开无痕窗口或连接VPN前后分别做一次指纹检测,对比生成的ID是否一致。
两种截然不同的"访客ID"
不是所有访客ID的构建方式都一样,这个区别正好解释了为什么清空浏览器有时能重置追踪,有时却不能。
基于存储的ID是服务器生成一次、然后写入Cookie、localStorage或类似客户端存储的一个随机值。它能存活多久,完全取决于那份存储能留多久——删掉Cookie,ID就没了。这正是大多数隐私工具专门对付的类型,也是为什么"清除Cookie"曾经算得上一条相当有效的建议。
指纹衍生的ID则不一样:网站不是把一个值写进你的设备,而是从浏览器和硬件本就会暴露的信息中计算出一个哈希——Canvas渲染、WebGL渲染器字符串、已安装字体、屏幕分辨率和硬件并发数、音频处理的细微差异,等等。完整的信号清单,以及为什么组合足够多的信号能让大多数浏览器接近于唯一,可参见我们的浏览器指纹技术完全指南:如何保护你的数字隐私。因为这一切都没有写进存储,"清除浏览数据"在你设备上根本无处下手。这个ID不是被存储的——而是在你下次访问时,根据同样的输入被重新识别出来的。
商业身份识别与反欺诈厂商(Fingerprint 公司的 visitorId 就是这种模式的典型例子)正是依赖这一特性:一个稳定的标识符之所以能在多个会话之间持续匹配同一设备,恰恰是因为它根本不在等着被清空的Cookie罐里。
哪些信号真正扛得住清除
并非每一种指纹输入都同样耐久。一个有用的划分思路是:能靠设置一键切换的,与来自硬件和驱动的。
| 信号 | 能否扛过Cookie/存储清除? | 原因 |
|---|---|---|
| Canvas 与 WebGL 哈希 | 能 | 来自GPU/驱动的渲染结果,而非存储的数据 |
| 已安装字体列表 | 能 | 来自操作系统,而非浏览器存储 |
| 音频指纹 | 能 | 来自音频处理链路的信号处理特征 |
| 硬件并发数、屏幕参数 | 能 | 每次都从设备实时读取 |
| Cookie、localStorage、IndexedDB | 不能(默认情况下) | 会被"清除浏览数据"明确清空 |
| 基于缓存的超级Cookie | 大多能,除非连缓存也一起清除 | 依附在缓存机制上,而非"清除数据"按钮针对的存储API |
渲染类和硬件类信号,正是让指纹衍生ID具备持久性的关键,因为它们是从设备本身重新计算出来的,而不是从某个文件里读回来的。这也是为什么它们最难防御——你没法像删Cookie那样"删掉"你GPU的渲染癖好。
超级Cookie:故意让基于存储的ID变得持久
有些追踪脚本更进一步,故意对抗清除操作。这种手法——常被称为复生(respawning)——会把同一个ID同时写进多个独立的存储:Cookie、localStorage、IndexedDB,甚至像 ETag 这样的HTTP缓存机制——服务器可以借助它悄悄回显确认某个回访客户端。如果你清除了Cookie却没动缓存,脚本就会读取那份幸存的副本,再把它重新写回你刚清空的存储里。
安全研究员 Samy Kamkar 的知名概念验证项目 evercookie 演示了这个思路:它把一个标识符冗余地存进它所能触及的尽可能多的浏览器存储机制里,专门确保清除其中任何一个,都能从其余几个里把ID恢复回来。这也说明了为什么单靠"清Cookie"从来都不是完整的防御——哪怕在指纹技术让存储彻底变得多余之前就是如此。
浏览器厂商也做出了反制,推出了能一次性清空某个网站全部存储数据的机制——参见MDN的Clear-Site-Data 响应头,它能让网站(或注重隐私的浏览器设置)指示浏览器把该源下的Cookie、缓存和存储一并清空,堵上复生手法利用的漏洞。不过,它对上文说的指纹衍生型ID毫无作用——既然标识符从未被存储过,也就没有"网站数据"可清。
为什么无痕模式无法重置它
隐私浏览模式的设计目标是解决一个本地问题:窗口关闭后,不在这台设备上留下痕迹。它们把Cookie和存储隔离进一个用完即弃的容器,窗口一关就丢弃——这正是为什么基于存储的ID在全新的无痕窗口里会被重置。
但你的Canvas渲染、WebGL渲染器字符串、字体列表和硬件特征,并不会因为你打开了一个无痕标签页而改变——不管哪种情况,它们都来自同一块GPU、同一个操作系统和同一套已安装软件。依赖指纹衍生ID的网站,在无痕模式下看到的信号和在你普通窗口里看到的一模一样,因此能把这两个会话识别为同一个访客。有些网站甚至更进一步,直接检测你是否处于无痕模式——通常是通过存储配额API里的一些细节实现的,具体机制参见网站如何检测隐身与无痕浏览模式。
为什么VPN同样无法重置它
VPN纯粹在网络层工作:它改变的是服务器看到的IP地址,通常还会改变看起来所在的地理位置。这对防御基于IP的追踪和地理定位确实有用,但它对浏览器或设备自身上报的任何信息都没有影响。你的Canvas哈希、WebGL渲染器、字体和屏幕参数,会原封不动地穿过VPN隧道,因为VPN从不触碰生成这些信息的浏览器进程。
所以,切换服务器或换个VPN提供商,并不会给你一个"全新"的指纹衍生ID——只会换来一个绑在同一套底层设备信号上的新IP。如果说有什么变化的话,一个每隔几分钟就在不同国家之间跳动、而指纹其余部分却纹丝不动的IP,本身反而是某些反欺诈系统会标记为可疑的一种模式。
隐私上的权衡
持久访客ID并非纯粹是对立面——正是这些让它难以清除的特性,也让它在防欺诈和账户滥用检测上派上用场,因为服务商需要在访客谎报Cookie的情况下依然认出回访设备。代价在于:完全相同的机制,一旦对准普通访客而非欺诈者,就变成了普通隐私手段(清Cookie、开无痕、用VPN)都碰不到的跨会话追踪。
这种不对称,正是"我清过历史记录了"很难算作真正重新开始的证据的原因,也是为什么真正有效的防御,是去改变信号本身——比如像Tor这样统一化指纹的浏览器,或者像Brave那样随机化指纹的浏览器——而不是去改变这些信号被写入的存储。我们的浏览器指纹技术完全指南:如何保护你的数字隐私对这两种思路做了更深入的介绍;扩展程序也值得仔细审视,因为一个粗心的扩展本身就可能增加追踪面——安装任何新扩展之前,请先看看浏览器扩展的隐私风险:你安装的可能在监视你。
如何测试你自己的抗清除能力
要快速看出你的设置是否真的能抵御持久ID,最简单的办法就是拿它跟自己比较:
- 在你的日常浏览器里运行一次 BrowserInsight 的指纹检测,记下Canvas/WebGL/音频的值和整体匿名评分。
- 清除全部网站数据,然后重新加载检测页面。如果同样的哈希值又出现了,说明它们本来就没有被存储过——而是从你的设备重新计算出来的。
- 换到隐身/无痕窗口再测一次,连上VPN后再测一次。如果数值依然和你第一次跑的结果一致,说明底层指纹——以及基于它构建的任何ID——都没有变化。
由于整个过程都在你自己的浏览器里客户端运行,这些数据在测试过程中不会离开你的设备。
常见问题
清除Cookie能删掉基于指纹的访客ID吗?
不能。指纹衍生的ID根本没有存在你设备上的任何地方——每次被识别时,它都是从你的浏览器和硬件特征重新计算出来的。清除Cookie、缓存或网站数据,压根没有东西可删。
VPN能让我拿到一个全新的访客ID吗?
不能。VPN改变的是你的IP地址,而不是浏览器或设备。指纹衍生的ID建立在渲染、字体和硬件信号之上,这些信号会原封不动地穿过VPN隧道。
无痕模式对指纹追踪完全没用吗?
不是完全没用,但作用有限。窗口关闭时,它能可靠地清除基于本地存储的ID,但它不会改变指纹衍生ID所依赖的渲染和硬件信号,所以这些信号依然能把你的无痕会话和普通会话关联起来。
到底什么才能真正阻止持久访客ID?
改变底层信号,而不是改变存储。一款统一化指纹的浏览器(比如Tor),或者按会话随机化指纹的浏览器(比如Brave),会移除ID所依赖的那些稳定输入。仅仅清Cookie做不到这一点。
总结
一个能扛过清Cookie、无痕模式和VPN的持久访客ID,并不是绕过了你的隐私防护——它只是建立在这些防护手段够不到的另一个层面上。基于存储的ID住在Cookie里,会响应"清除浏览数据";指纹衍生的ID则住在你设备的渲染和硬件特征里,每次访问都会被重新计算出来。搞清楚自己面对的是哪一种,是防御它的第一步——而在每种防御手段前后分别检查一次自己的指纹,是判断它是否真正起效的唯一办法。
推荐阅读:


