术语表
浏览器指纹
网页能在几毫秒内、无需授权就读到的一组浏览器与机器属性,合在一起足以认出这台设备(browser fingerprint)。
也称:设备指纹, 浏览器指纹识别。
浏览器指纹不是一个数字。它是网页在几毫秒内读到的几十项属性,既不弹权限提示,也不留下任何痕迹:平台字符串、语言列表、时区、屏幕几何尺寸、声明的设备内存与 CPU 核心数、可用字体,以及图形栈和音频栈输出的哈希值。它对网站的价值在于,访客用来重置自己的那些做法都动不了它——清空 Cookie 没用,换一个 IP 地址也没用。
真正让人丢账号的一点是:指纹是被当成一整套来判断的。网站问的不是某个值是否罕见,而是这些值合起来是否描述了一台可能存在的机器。声称 macOS 的 user-agent 旁边配着写 Windows 的客户端提示,描述不出任何一台真实电脑;4K 屏幕旁边配着两个 CPU 核心、时区又和出口 IP 差三小时,同样如此。把各个字段分别打乱只会更糟,因为每多一个随机字段,就多一次两两互相矛盾的机会。Argus 把身份作为一整套彼此自洽的值生成,并在渲染器里落地——指纹页面会讲清楚哪些东西被测量、替换值又落在哪里。
术语表里的更多条目
Canvas 指纹
让浏览器画一个图形或一行文字,再对回读到的像素做哈希,由此得出的标识(canvas fingerprint)。
WebGL 指纹
由网页通过 WebGL 看到的图形硬件构成的标识:声明的 vendor 与 renderer 字符串,加上三维场景渲染出的像素(WebGL fingerprint)。
音频指纹
把一段合成音送进浏览器的音频栈处理,再对输出的数字做哈希得到的标识(audio fingerprint)。
WebRTC 泄露
网页从 WebRTC 建立连接的过程里读到你的真实 IP,绕过了浏览器其余部分正在使用的代理(WebRTC leak)。
用户代理客户端提示
Chromium 用来取代 user-agent 字符串的结构化方案:一组 Sec-CH-UA 请求头和一个 JavaScript 接口,分别上报浏览器、平台和硬件(user-agent client hints)。
Cookie 存储区
浏览器存放 Cookie 的那个库。共用一个库的一切也就共用一个身份,所以隔离是库的属性,而不是标签页的属性(cookie jar)。
所有条目都列在术语表索引上。