浏览器指纹和 Cookie 有什么不同
| Cookie 等存储 | 浏览器指纹 | |
|---|---|---|
| 保存在哪里 | 你的浏览器里 | 不保存,由网站每次读取计算 |
| 能否清除 | 可以清除或使用无痕模式 | 不能,同一设备通常长期稳定 |
| 常见用途 | 保持登录、购物车、偏好设置 | 识别设备、反欺诈、风控、广告归因 |
常见的指纹维度
| 维度 | 暴露的信息 | 常见的不一致 |
|---|---|---|
| User-Agent 与 Client Hints | 浏览器品牌与版本、操作系统、架构 | UA 写 Chrome 144,Client Hints 或 Worker 中却是另一个版本 |
| 屏幕 | 分辨率、可用高度、色深、设备像素比 | 可用高度与系统任务栏不符 |
| 语言与时区 | navigator.language、Accept-Language、Intl 时区 | 时区与 IP 所在地不一致 |
| 字体 | 已安装的字体列表与渲染宽度 | Windows UA 却检测到 macOS 专有字体 |
| Canvas | 文字与图形的渲染结果哈希 | 每次读取都变化(随机噪点),或与 GPU 不符 |
| WebGL / WebGPU | GPU 厂商与渲染器、参数、像素结果 | Windows 系统报告 Apple GPU |
| Audio | AudioContext 处理结果的哈希 | 同一设备多次结果不稳定 |
| ClientRects | 元素尺寸的细微差异 | 主窗口与 iframe 结果不同 |
| 硬件 | CPU 核心数、设备内存 | 核心数与机型明显不符 |
| WebRTC | 本地与公网 IP 候选地址 | 使用代理时仍暴露真实公网 IP |
| 自动化特征 | navigator.webdriver、无头浏览器标识 | 自动化工具留下的属性 |
为什么“一致”比“随机”更重要
真实设备的特征彼此吻合,并且长期稳定。检测网站因此不只看某个值是否罕见,更关注这些值能否同时成立:
- 跨维度一致:系统、字体、GPU、屏幕与浏览器版本要来自同一种设备。
- 跨上下文一致:主页面、iframe 与 Worker 读取到的身份应该相同。
- 跨时间稳定:同一设备每次访问得到相同的指纹;每次都变的“随机噪点”本身就是异常信号。
- 与网络一致:时区、语言和地理位置应与出口 IP 所在地相符。
如何检测自己的浏览器指纹
| 工具 | 侧重点 |
|---|---|
| CreepJS | 多上下文一致性、Canvas、WebGL、Audio、字体、Intl 等,并标记可疑的“谎言” |
| Pixelscan | 浏览器、系统、位置、自动化与指纹伪装的一致性 |
| BrowserLeaks | 分项查看 Canvas、WebGL、字体、WebRTC、Client Hints 等原始数据 |
| IPhey | 浏览器、位置、IP、硬件、软件的综合评估 |
同时测两个环境
指纹浏览器的价值在于环境之间有区别,只测一个环境看不出问题。
重启后再测一次
同一环境关闭再打开,关键值(Canvas、WebGL、时区)应保持不变。
和本机真实浏览器对比
同一台电脑上的官方 Chrome 也会被部分页面标红,先确认哪些提示是检测站点自身的判断方式。
记录字段而不是颜色
记下测试时间、系统、浏览器与内核版本、代理,以及具体失败字段。检测规则会更新,结果只代表当时。
Prism 如何处理这些维度
Prism 的指纹配置由自编的 Chromium 内核在底层处理,不依赖向网页注入脚本;系统、CPU、屏幕与 GPU 来自同一套硬件模板,Canvas、WebGL、Audio 等细节由每个环境的指纹种子固定。逐项说明见指纹配置与硬件模板。
常见问题
- 清除 Cookie 或用无痕模式能换掉指纹吗?
- 不能。指纹来自设备与浏览器本身的特征,清除存储不会改变它。
- 使用代理能改变浏览器指纹吗?
- 代理只改变网络出口。时区、语言与 WebRTC 等仍可能暴露差异,需要与指纹一起配置。
- 指纹越独特越容易被识别吗?
- 越罕见的组合越容易被区分,但更关键的是自相矛盾的组合。使用常见、完整的硬件组合,比随机拼凑更稳妥。
- 检测页面显示红色,就一定有问题吗?
- 不一定。先看具体字段,并与同机真实浏览器对比。代理被识别、字体差异或站点规则都可能导致提示。