浏览器指纹原理

Canvas、WebGL、Audio、字体、Client Hints 等指纹如何生成,网站如何用指纹识别设备,以及指纹与 IP 的一致性校验。

约 6 分钟阅读更新于 2026-11-02

即使清空 Cookie、换了 IP,网站往往仍能认出「还是这台设备」。依靠的就是浏览器指纹:把浏览器与硬件的大量细节组合起来,得到一个几乎独一无二的标识。

指纹由什么组成

基础属性

User-Agent、操作系统、语言列表、时区、屏幕分辨率与像素比、CPU 核心数、内存大小、触控支持等。单个属性很常见,但组合起来区分度就很高。

Canvas 指纹

网页在隐藏的画布上绘制一段文字和图形,再读取像素数据计算哈希。不同的显卡、驱动、字体渲染和抗锯齿方式会产生细微差别,所以同样的绘制指令在不同设备上得到不同的哈希。

WebGL 指纹

WebGL 可以读取显卡厂商与型号(如 ANGLE (NVIDIA ...)),并通过 3D 渲染结果计算哈希,比 Canvas 更能反映硬件差异。

Audio 指纹

用 Web Audio API 生成一段信号并经过压缩等处理,不同设备的浮点运算与音频栈实现会让输出出现微小差异。

字体与 Client Hints

通过测量文字宽度判断系统安装了哪些字体;Client Hints 则让浏览器主动提供平台版本、设备型号、架构等更精确的信息。

网站如何使用指纹

  • 识别回访设备:无需 Cookie 也能把多次访问关联到同一台设备。
  • 账号关联:多个账号出现相同指纹,会被认为由同一人操作。
  • 识别自动化:无头浏览器、自动化框架会留下特征(如 navigator.webdriver、缺失的插件、异常的 WebGL 信息)。
  • 判断是否伪装:指纹各项之间、指纹与 IP 之间是否自洽。

一致性比「独特」更重要

风控系统最在意的往往不是指纹是否独特,而是是否矛盾:

  • IP 在美国,浏览器时区却是 Asia/Shanghai;
  • 语言列表以 zh-CN 开头,HTTP 请求头的 Accept-Language 却是 en-US;
  • User-Agent 声称是 Windows,Client Hints 报告的平台却是 macOS;
  • 声称是手机,却没有触控支持、屏幕是桌面分辨率。

这些矛盾通常来自代理与浏览器设置不匹配,或修改指纹的插件只改了一部分属性。本站的浏览器环境检测会逐项交叉校验,并给出需要调整的项目。

怎样降低指纹带来的风险

  • 让时区、语言与 IP 所在地保持一致;
  • 避免只修改 User-Agent 而不改其他属性,这比不改更容易暴露;
  • 不同用途的账号使用独立的浏览器配置文件,避免互相关联;
  • 谨慎使用随机化指纹的插件:每次访问都变化的指纹,本身就是异常信号。