详解
浏览器指纹识别会从您的浏览器中收集一组属性,并将其转化为稳定的标识符。即使没有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 的情况下稳定地识别该浏览器。