即使清空 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 而不改其他属性,这比不改更容易暴露;
- 不同用途的账号使用独立的浏览器配置文件,避免互相关联;
- 谨慎使用随机化指纹的插件:每次访问都变化的指纹,本身就是异常信号。