词汇表

什么是浏览器指纹识别?

浏览器指纹识别是一种网站用于识别和追踪访客的技术,通过收集浏览器的一组属性(User-Agent、屏幕尺寸、字体、插件、Canvas 哈希、WebGL 签名等),并将其组合为唯一签名。

了解现代指纹识别所采集的信号、为何仅凭「新 IP」不足以伪装成真实用户,以及如何保持爬虫指纹的干净。

详解

浏览器指纹识别会从您的浏览器中收集一组属性,并将其转化为稳定的标识符。即使没有Cookie,User-Agent、语言、时区、屏幕分辨率、已安装字体、Canvas渲染哈希、WebGL渲染器字符串、音频上下文指纹以及数十种其他信号的组合,也足以在跨会话中以惊人的准确度识别单个浏览器。

指纹识别主要分为两大类:被动指纹识别和主动指纹识别。被动指纹识别读取浏览器隐式暴露的属性:User-Agent、Accept-Language、sec-ch-ua客户端提示。主动指纹识别则运行JavaScript,探测浏览器的渲染引擎、音频引擎、GPU及时序特征,然后计算哈希值。

对于爬虫和自动化而言,指纹识别至关重要,因为仅靠IP轮换是远远不够的。如果您轮换了10,000个住宅IP,但每个请求都携带相同的Canvas指纹和相同的Playwright默认User-Agent,目标网站就能将所有10,000个请求关联到同一个爬虫实例。现代反机器人系统(Cloudflare、Akamai、PerimeterX、Datadome)都在IP分析的基础上大量使用指纹识别技术。

工作原理

当您的浏览器加载含有指纹识别代码的页面时,脚本会枚举浏览器属性(UA、语言、插件、屏幕、时区),绘制包含特定文本和渐变的隐藏画布并读取渲染后的像素(canvas 指纹),创建 WebGL 上下文并读取 GPU 供应商和渲染器字符串(WebGL 指纹),通过音频 API 生成音调并读取频谱(音频指纹),以及对特定操作(math.tan、performance.now 漂移)计时以获取硬件信号。

所有这些值会被哈希为一个指纹 ID 并发送回服务器。由于即便是十几个属性的组合也具有极高的唯一性,生成的 ID 能够在清除 Cookie、新会话以及不同 IP 的情况下稳定地识别该浏览器。

类型

被动指纹

通过 HTTP 头和 JavaScript 全局变量读取浏览器隐式暴露的属性:User-Agent、Accept-Language、sec-ch-ua 提示、屏幕尺寸、时区、语言。开销低,适用范围广。

主动式 / Canvas 指纹识别

运行 JavaScript,向隐藏的 canvas 绘制内容并读取像素哈希值。不同的 GPU/驱动组合会产生细微差异的渲染结果,使 canvas 指纹在每台设备上高度稳定。

WebGL 指纹识别

探测 WebGL 上下文以获取 GPU 厂商、渲染器字符串及支持的扩展。无头浏览器和虚拟化 GPU 通常会产生独特的特征签名。

音频指纹识别

使用 AudioContext API 生成音频波形并读取生成的频谱。不同操作系统和音频驱动对音频处理存在细微差异,从而产生稳定的设备级哈希值。

TLS / 网络指纹识别(JA3、JA4)

对 TLS 握手本身进行指纹识别——包括密码套件列表、扩展、ALPN 顺序、GREASE 值。在应用层有机会响应之前,即可识别底层 HTTP 客户端(curl、Python requests、Playwright 等)。

常见使用场景

登录、注册及表单页面的 Bot 防御
账号去重(一个指纹对应一个用户)
金融及广告购买流程中的欺诈评分
无 Cookie 的回访用户追踪
应用层的爬虫检测
常见问题

常见问题

关于以下内容的常见问题 浏览器指纹识别.

因为反 Bot 系统对浏览器进行指纹识别,而不仅仅是 IP。如果 10,000 个请求来自 10,000 个不同 IP,但都携带相同的 canvas 指纹、相同的 TLS JA3 和相同的 User-Agent,系统仍可将它们关联为同一个爬虫。您需要 IP 轮换与指纹卫生双管齐下,才能看起来像众多不同的真实用户。