指纹隐私

浏览器指纹:比 Cookie 更难摆脱的追踪术

清了 Cookie、开了无痕模式,网站为什么还能认出你?浏览器指纹通过几十项硬件与软件特征拼出你的唯一画像。讲清楚原理、维度与对抗手段。

无痕模式能挡住 Cookie,挡不住指纹。

网站给每个访客的浏览器画像打分——不是看某一个特征,而是把几十项特征拼在一起。组合的唯一性,让"认出你"不再依赖任何存储。这就是浏览器指纹(Browser Fingerprinting)。

原理:组合的唯一性

单个特征不唯一:用 Chrome 的人几亿,屏幕 1920×1080 的人几千万。但把特征叠起来:

Chrome 132 + Windows 10 + 显卡渲染结果 X + 字体列表 Y + 时区 + 语言 + 屏幕 + 触屏支持……

组合的熵急剧上升。研究(AmIUnique 等)表明,仅凭十几个特征,三分之一以上的浏览器在全网唯一

最关键的特性:指纹存在"你"身上,不依赖任何可删除的存储。你清掉 Cookie、换无痕窗口、甚至重启电脑,指纹还在。

主要采集维度

Canvas 指纹

让浏览器在 <canvas> 上画一段文字和图形,然后读取像素数据。不同机器的:

  • 显卡与驱动
  • 抗锯齿算法
  • 字体渲染引擎

会让同样的绘制指令产生微小的像素差异。这个差异被哈希后就是一个稳定指纹。Chrome 每个版本还会加入随机噪声扰动,反而让"噪声处理方式"本身成为新特征。

WebGL 指纹

更进一步:读取 WebGL 的渲染器字符串(暴露显卡型号)+ 渲染 3D 场景取像素哈希。还能顺手拿到 GPU 厂商、最大纹理尺寸。

AudioContext 指纹

调用浏览器的音频处理 API(OfflineAudioContext),用固定参数处理一段合成信号,读取输出浮点数。不同机器的浮点运算与音频实现差异产生稳定哈希。不需要麦克风,不出声

字体枚举

网页逐个测试几百种字体在不在:渲染宽度一致说明字体存在。装了思源黑体 + Sarasa Mono 的组合,本身就是小众信号。

其他几十项

  • UA、平台、语言列表
  • 时区、时区偏移
  • 屏幕分辨率、色深、触屏点数
  • 硬件并发数(navigator.hardwareConcurrency
  • 设备内存(navigator.deviceMemory
  • 是否 Do Not Track、是否开广告拦截

IPchase 指纹检测把这些维度做成了可视化报告——7 大项指纹 + 一致性分析,跑一次就能看到自己浏览器的"独特程度"。

为什么对抗这么难

指纹攻防的不对称在于:

  • 防守方要全部一致,攻击方只要一项独特。你改了 Canvas 哈希,但字体列表没变——还是原来那个"改了 Canvas 哈希的你"
  • 伪装本身也是特征。太罕见的字体组合、太规整的假指纹,反而更独特
  • 跨设备关联:手机和电脑指纹不同,但行为模式(打字节奏、浏览路径)可以关联

实用的对抗手段

按性价比排序:

  1. 用大厂主流浏览器:越大众越好混——最新版 Chrome 的默认配置就是"最大的人群"
  2. 不装小众字体:系统字体保持原样
  3. 指纹浏览器(Multilogin、AdsPower 这类):为每个环境注入一致的假指纹,适合多账号运营。注意它们解决的"一致性"问题的同时也创造了新的特征
  4. Firefox + resistFingerprinting:Mozilla 的方案是把所有特征拉平到同一值(时间粒度变粗、Canvas 统一噪声),让大家都长一样。缺点是网页兼容性受影响
  5. Tor Browser:同上的思路,更激进,代价是慢

对普通用户,1 + 2 的性价比最高

小结

  • 指纹 = 环境特征组合的唯一性,不依赖可删除存储
  • 核心维度:Canvas、WebGL、AudioContext、字体、硬件参数
  • 对抗的核心思路:要么藏进大人群,要么拉平差异
  • "伪装度"高的浏览器环境 = 特征少且一致性高

想看看你的浏览器指纹长什么样、独特度多高?IPchase 指纹检测直接跑,不用装任何东西。

检测你的网络环境:回到首页做一次完整检测,或试试 指纹检测