浏览器指纹:比 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 哈希的你"
- 伪装本身也是特征。太罕见的字体组合、太规整的假指纹,反而更独特
- 跨设备关联:手机和电脑指纹不同,但行为模式(打字节奏、浏览路径)可以关联
实用的对抗手段
按性价比排序:
- 用大厂主流浏览器:越大众越好混——最新版 Chrome 的默认配置就是"最大的人群"
- 不装小众字体:系统字体保持原样
- 指纹浏览器(Multilogin、AdsPower 这类):为每个环境注入一致的假指纹,适合多账号运营。注意它们解决的"一致性"问题的同时也创造了新的特征
- Firefox + resistFingerprinting:Mozilla 的方案是把所有特征拉平到同一值(时间粒度变粗、Canvas 统一噪声),让大家都长一样。缺点是网页兼容性受影响
- Tor Browser:同上的思路,更激进,代价是慢
对普通用户,1 + 2 的性价比最高。
小结
- 指纹 = 环境特征组合的唯一性,不依赖可删除存储
- 核心维度:Canvas、WebGL、AudioContext、字体、硬件参数
- 对抗的核心思路:要么藏进大人群,要么拉平差异
- "伪装度"高的浏览器环境 = 特征少且一致性高
想看看你的浏览器指纹长什么样、独特度多高?IPchase 指纹检测直接跑,不用装任何东西。
检测你的网络环境:回到首页做一次完整检测,或试试 指纹检测。