全部文章

隐私与指纹

无痕模式会改变浏览器指纹吗?

答案是不会。无痕只丢掉 Cookie,指纹原样保留。看看它到底隐藏了什么、暴露了什么,以及真正能区分两个身份的是什么。

作者 Mango Team发布于 4 分钟阅读

打开一个无痕窗口,访问一个指纹检测页,再和普通窗口的结果对比一下。哈希一样,显卡一样,字体一样,屏幕、时区、IP 全都一样。无痕模式改变的是浏览器记住什么,不是浏览器是什么。这篇把两者之间的界线画清楚,并说明如果你靠无痕窗口来区分账号,意味着什么。

无痕模式到底做了什么

Chrome 自己的描述很准确:无痕窗口不保存浏览历史、Cookie 和网站数据、表单里输入的信息;关闭最后一个无痕窗口时,会清除期间收集的 Cookie 和网站数据。扩展默认关闭,除非你允许。下载的文件和书签会保留。

这是一段关于存储的说明。在无痕窗口里,网站照样可以设置 Cookie、使用本地存储,只是它们放在一个临时罐子里,会话结束时倒掉。会话期间,网站看到的是一个没有历史的新访客;会话结束,罐子就没了。这份清单里没有一项涉及构成指纹的那些信号。

它一点没动的东西

信号普通窗口无痕窗口原因
User-Agent 与 Client HintsmacOS 上的 Chrome 152macOS 上的 Chrome 152同一个程序,同一个系统
屏幕、核心数、内存2560×1440、10、8 GB相同同一台硬件
Canvas 与 WebGL哈希 A、Apple M2哈希 A、Apple M2同一块显卡、驱动和渲染器
字体你安装的那套相同从操作系统读取
时区与语言Asia/Shanghai、zh-CN相同从操作系统读取
IP 与 WebRTC你的网络相同同一条网络路径
Cookie 与存储持久临时唯一的区别

除了最后一行,每一行都完全相同。在两个窗口里打开实验室,会得到同一个指纹标识,因为标识是用那些不变的行算出来的。

真正变了的那一点,以及它为什么帮不上忙

无痕并不隐形。网站花了很多年寻找辨认无痕窗口的办法,因为设了付费墙的媒体想阻止读者靠无痕重置免费阅读次数。手段一直在换(早期基于文件系统 API 的方法在 Chrome 76 被堵上,之后又出现了基于存储配额的方法),但规律很稳定:无痕窗口的行为和普通窗口有细微差异,脚本测得出来。

所以无痕真正改变的那一样东西,是一个「此人打开了无痕窗口」的标记。配上一个没变的指纹和一个没变的 IP,这不是一个新身份,而是同一个身份,外加一个「正在试图看起来像新身份」的标签。

新的 Cookie 罐子不等于新的访客。

靠指纹做记录的网站,在页面加载的一瞬间就认出这个无痕窗口是同一个浏览器。空的 Cookie 罐子只能告诉它:你清掉了,或者从没保留过它的 Cookie。

两分钟的实验

  1. 在普通窗口打开实验室,记下指纹标识和 Canvas 哈希。
  2. 打开一个无痕窗口,再次加载实验室。
  3. 对比。标识、Canvas 与 WebGL 行、字体行和网络行都会一致。
  4. 现在在普通窗口清除 Cookie 并刷新。标识依然一致,因为它的输入里根本没有 Cookie。

看看有无痕和没有无痕时的指纹

在两个窗口里分别运行实验室。那些一致的行,就是网站不靠 Cookie 也能认出你的依据。

打开实验室

那么,真正区分两个身份的是什么?

三样东西必须同时不同,而无痕只在一次会话的长度内给你其中一样:

  1. 存储。 Cookie、本地存储、IndexedDB、缓存和 Service Worker。无痕临时隔离它们;独立的浏览器环境永久隔离它们。
  2. 指纹。 User-Agent、Client Hints、屏幕、显卡、Canvas、字体、时区、语言。无痕一样都没改。第二个身份需要第二套内部一致的指纹。
  3. 网络。 IP 和 WebRTC。无痕两样都没改。第二个身份需要自己的出口,而且 WebRTC 要和出口一致。

两个账号只要共享三者之一,就可以被关联;三者全部共享、其中一个还在无痕窗口里,那就是同一个账号外加一个标记。完整的清单见浏览器环境隔离。

什么时候无痕是对的工具

它很适合它被设计出来的用途:借用别人的电脑、不受个性化影响地查一个价格、在自己电脑上登录第二个账号五分钟、不让某次搜索进入历史记录。这些场景要的正是那个临时罐子,指纹没变也无所谓。

它不适合运营绝不能被关联的账号,原因就是上面那条:风控系统用来关联它们的每一个信号都原封不动。

Mango Browser 怎么处理

Mango 从无痕停下的地方开始。每个环境都是完全独立的浏览器目录,Cookie、存储、缓存和扩展在环境之间互不相通,而且会话之间持久保存,不会在关窗时消失。每个环境还带着自己的指纹:一个只属于该环境、但每次绘制都相同的 Canvas 种子,一个从该环境操作系统的真实显卡池中选出的 WebGL 渲染器,一份属于该系统的字体列表,以及描述同一个浏览器的 User-Agent 与 Client Hints。

给环境绑定代理,网络故事也跟着走:HTTP IP、WebRTC 候选地址、时区和语言都描述那个出口。在两个 Mango 环境里分别打开实验室,会得到两个不同的标识,这是无痕模式永远给不了的结果。

参考资料

  1. Google Chrome 帮助:无痕浏览的工作原理
  2. Google Chrome 帮助:以无痕模式浏览
  3. MDN: Canvas API

到指纹实验室看看你的浏览器暴露了什么

继续阅读