CreepJS 详解
CreepJS 是研究人员和指纹浏览器开发者最常用的指纹识别测试。它不给出通过或失败的结论,而是展示你的浏览器暴露了什么、哪些数值相互矛盾,以及三个衡量它看起来有多像 headless 或 stealth 的百分比。
Abraham Juliot 的开源研究项目. 打开 CreepJS
CreepJS 是什么?
CreepJS 是 Abraham Juliot 开发的开源指纹识别研究页面,托管在 GitHub Pages 上。它收集的信号范围非常广,从 WebGL、音频到字体、Worker 和 WebRTC,并对每个部分分别计算哈希,因此你可以准确看到两次访问之间指纹的哪一部分发生了变化。
它的突出之处在于会寻找谎言(lies):被 JavaScript 篡改过的数值,或页面与 Web Worker 之间对不上的数值。它的“Headless”部分把这些归纳为三个数字。由于它是开源的,你可以准确读到每项检查是怎么实现的。
CreepJS 检查哪些内容
Headless
三个百分比:浏览器与无头浏览器有多相似(“like headless”)、显示出多少明确的无头特征(“headless”),以及显示出多少 stealth 补丁的迹象(“stealth”)。
Lies
在 JavaScript 中被覆写的浏览器函数,这正是大多数 stealth 插件的工作方式,也是 CreepJS 抓出它们的方式。
Workers
在 Web Worker 中读取并与页面对比的数值:User-Agent、GPU、时区、语言、核心数和内存。
渲染
Canvas、WebGL、音频、字体和 DOM rect 测量值,各自计算哈希。
WebRTC、时区及其他
网络候选地址、时区与语言区域、屏幕,以及几十个较小的部分。
如何解读 CreepJS 的结果
- % like headless
- 在无头浏览器中常见、但也会出现在普通浏览器中的弱信号。这里的数字不为零是正常的。
- % headless
- 无头或自动化浏览器的明确迹象。这才是需要盯住的数字。
- % stealth
- stealth 补丁的迹象,例如被覆写的函数。JavaScript stealth 插件会在这里现形。
- FP ID 与模糊哈希
- 代表你整个指纹的标识符。只要有任何变化它们就会改变,所以用于比较不同的访问,而不是用来评判一个浏览器。
真实浏览器的得分
测量时间为 2026 年 9 月 20 日和 21 日,使用荷兰一条家庭光纤线路上的一台 Windows 11 电脑(NVIDIA RTX 3070),未使用代理或 VPN。共三款浏览器:一位用户日常手动使用、装有广告拦截器的 Chrome 153;由 Playwright 驱动的同一款官方 Chrome 153;以及由 Playwright 驱动并设置了指纹种子的 Clearcote 153。
| 浏览器 | CreepJS 的结论 |
|---|---|
| 日常使用的 Chrome 153,手动操作 | 19% like headless · 0% headless · 0% stealth |
| 官方 Chrome 153,Playwright 驱动 | 25% like headless · 33% headless · 0% stealth |
| Clearcote 153,Playwright + 种子 | 25% like headless · 0% headless · 0% stealth |
“headless”数值正是自动化露馅的地方:Playwright 驱动下的官方 Chrome 为 33%,Clearcote 和那位用户自己的 Chrome 均为 0%。Clearcote 的 stealth 为 0% 在意料之中,因为它是在引擎内部修改数值,而不是在 JavaScript 中覆写函数,所以谎言检测找不到任何东西。
普通浏览器也会出现的结果
- “like headless”百分比不为零。就连那位用户自己的 Chrome 也显示 19%。
- 以
.local结尾的 WebRTC host 候选地址被当作泄露。这是 Chrome 的 mDNS 保护在隐藏你的本地地址,而不是暴露它;正因如此,Clearcote 审计将其计为通过。
常见问题
什么样的 CreepJS 结果算好?
真正重要的是 0% headless 和 0% stealth。“like headless”百分比在十几到二十几之间是正常的;在我们的测试中,一位用户的日常 Chrome 显示为 19%。
为什么 CreepJS 每次显示的指纹 ID 都不一样?
这个 ID 是它测量的全部内容的哈希,所以任何变化,从新增一个字体到窗口尺寸不同,都会改变它。它用于比较两次访问,而不是作为分数。
CreepJS 能检测出 puppeteer-extra-plugin-stealth 吗?
它的设计目标就是抓出在 JavaScript 中被覆写的函数,而该插件恰恰是这样工作的;这会体现在 lies 和 stealth 百分比中。这种做法为何会暴露自己,请参阅 stealth 插件对比。
CreepJS 和 Clearcote 审计是一回事吗?
不一样。CreepJS 是一个展示原始发现的研究页面;Clearcote 审计会运行 294 项一致性检查,并对每个结果做出解释。两者有重叠,也在少数地方看法不同,例如 mDNS WebRTC 候选地址。
想了解每一项检查的含义?
Clearcote 审计会对打开它的任何浏览器运行 294 项一致性检查,每一项都附有通俗易懂的英文说明和修复方法。免费,无需账号。
相关阅读