2 min read

信息安全

Cloudflare Turnstile 暗藏 WebGL 指纹:那个号称"证明你是人类"的验证,正在悄悄给你打标签

2026 年 5 月的最后一天,Hacker News 一篇技术博客冲上榜首,569 个点赞、322 条评论,几乎是当天全站讨论度最高的帖子。博客的作者、长期为隐私奔走的开发者 Haelwenn Monnier(lanodan)发现了一个让整个隐私圈炸锅的事实:Cloudflare 旗下用来"证明你是人类"的 Turnstile 验证组件,正在悄悄收集你设备的 WebGL 指纹

这意味着什么?意味着你每次登录一个普通网站、点开一篇新闻、提交一份表单时,Cloudflare 都有可能已经把你设备的"身份证"——显卡型号、驱动版本、渲染能力——悄悄记了下来。而这一切发生的前提,仅仅是浏览器加载了一个他们家的验证脚本。

这篇文章,我们就来扒一扒这件事的来龙去脉。

Cloudflare Turnstile WebGL 指纹


一周前的"小升级",一周后全网炸锅

事情起因于 Haelwenn 的一个发现。过去一周左右,他在用自己开发的 WebKitGTK 浏览器 BadWolf 访问某些网站时,发现 Turnstile 验证陷入无限循环——刷不出"我是人类"的勾选框,网站彻底进不去。

他一开始以为是 BadWolf 自身的问题。但排查后,他在 Cloudflare 官方的 Turnstile 浏览器兼容性测试页面上找到了一行不起眼的提示:"WebGL renderer info is spoofed"(WebGL 渲染器信息被伪造)

换句话说:Cloudflare Turnstile 会主动检查你浏览器返回的 WebGL 渲染器信息。如果你"造假"了——比如用了反指纹扩展、或者浏览器本身就会做反指纹——Cloudflare 就认为你"看起来像在隐藏身份的机器人",拒绝放行。

更有意思的是 Cloudflare 给出的官方解释,原文是这么说的:

"Turnstile uses browser fingerprinting to verify you're human. Privacy tools that block or randomize fingerprinting make your browser look like a bot trying to hide its identity. Temporarily allowing fingerprinting for this site will fix the issue."

翻译过来就是:"我们用浏览器指纹来验你是不是人;如果你开了反指纹工具,那在我们眼里你看起来像机器人。请暂时关闭反指纹功能以解决此问题。"

Haelwenn 用了四个词总结自己的反应:It is tracking(这就是追踪)。


WebGL 指纹到底有多"毒"?

很多读者可能不太理解,WebGL 指纹是个什么东西,为什么它会引发隐私圈这么大的反弹。

简单解释:现代浏览器为了让网页能跑 3D 效果,会暴露一个叫 WebGL 的接口。通过这个接口,网页可以查询你显卡的型号、驱动版本、支持的扩展、渲染精度等几十项参数。这些参数组合起来,在你的浏览器里几乎是独一无二的"设备指纹"

和传统的 Cookie 不同,这种指纹:

  • 不需要在你的电脑上存任何东西,所以清缓存、隐身模式都没用
  • 不需要你的许可,JavaScript 静默执行即可获得
  • 极其稳定,你换浏览器、换操作系统,指纹都不会变
  • 精度极高,据多项研究显示,在数百万用户中精准识别个体的准确率超过 90%

因此,WebGL 指纹一直被隐私圈视为"高危 API"。苹果的 WebKit 内核多年来默认屏蔽 WebGL 渲染器信息,正是出于这个原因——苹果认为这种追踪方式已经越过了"可接受"的边界。

而现在,Cloudflare 把这个被苹果主动屏蔽的指纹收集,用到了"证明你是人类"的功能里。这等于说:"你要想通过我的人机验证,先把隐私工具关掉"


WebKitGTK 浏览器被"误伤":技术细节有点黑色幽默

这件事最讽刺的部分在于 Haelwenn 使用的 BadWolf 浏览器。

BadWolf 是基于 WebKitGTK 的浏览器,而 WebKit 内核(包括 Safari)默认就对 WebGL 指纹做了防护。这种防护"多年来一直是 Apple 的策略,开发者关不掉"。换句话说,BadWolf 不是"故意伪装"成机器人,它只是继承了 WebKit 的默认安全策略。

但 Cloudflare 显然没有为 WebKit 浏览器做例外处理。结果就是:所有使用 WebKit 内核的第三方浏览器(除了 Safari 本体),都被人机验证拒之门外

评论区里,一位站方开发者留言特别扎心:

"我们的网站因为联系表单的机器人问题接入了 Turnstile,原本以为是更好的用户体验。现在看来,Turnstile 实际上在把一部分访客挡在门外。"

另一位用户直接抛出了一个尴尬的二选一:

"a. Accept All(全盘接受)
b. Accept Only Necessary Fingerprinting(只接受必要的指纹)"

在 Cloudflare 的设计下,没有"拒绝"这个选项


Mozilla 的意外"助攻":Gecko 内核的隐私防护失守

如果你觉得"反指纹的 WebKit 被挡"已经够糟了,Firefox 用户也别太开心。

Haelwenn 在文章里指出,Mozilla 在 WebGL 指纹防护这件事上"搞砸了"——具体参见 Bugzilla 报告 #1916271。Gecko 引擎会返回"经过清理的 GPU 特征",而不是像 WebKit/Blink 那样对所有用户返回同一个硬编码字符串。

这意味着:即使你打开 Firefox 默认的"严格隐私"模式,你的 GPU 信息在 Cloudflare 眼里依然有微小差异可识别。

更糟糕的是,privacy.resistfingerprinting 这个真正能起作用的开关,默认是关闭的。即使你把隐私设置调到 "Strict",它也不会自动启用。

Haelwenn 测试了三种情况:

  1. Firefox 145.0 默认设置:轻松通过 Turnstile,没有警告
  2. 手动开启 privacy.resistfingerprinting:Turnstile 提示 "Canvas Randomization Detected",依然可能被拒
  3. WebKitGTK 浏览器:完全无法通过

翻译成大白话:当下任何想用主流浏览器干净地通过 Turnstile 的尝试,都需要在自己这一侧放弃一部分隐私防护


Cloudflare 的立场:反爬的必要成本?

面对排山倒海的质疑,Cloudflare 一直没给出官方公开声明。但从 Turnstile 文档和社区回复来看,他们的立场基本可以归纳为:

  • 反爬虫必须:现在自动化机器人、撞库脚本、抢票软件越来越狡猾,传统的"图形验证码"用户体验差且早已被攻破;Turnstile 走的是"无感验证"路线,靠机器学习判断你是不是人
  • 指纹是"行业标准":他们认为 Google reCAPTCHA、hCaptcha 等竞品也都在用类似手段
  • 可选"降级":他们声称网站主可以配置 Turnstile 在"指纹不可用"时降级到其他验证方式,但这个开关对普通访客来说,并不能直接控制

但这套说辞在隐私圈看来有三个明显漏洞:

第一,"反爬不等于追踪"。 反爬只需判断"流量是否像机器人",并不需要长期存储每个人的设备指纹。Cloudflare 完全可以在用户会话结束后丢弃指纹数据,但他们没有明确说明这一点。

第二,"行业标准"不等于"对用户透明"。 指纹收集是否告知用户、是否提供拒绝选项、是否限制了用途,这些才是关键。一句"别人也这么做"并不构成正当性。

第三,"网站主可降级"忽视了大多数用户的现实。 99% 的用户根本不知道"网站主"是谁,更没有能力要求网站关闭 Turnstile 的指纹功能。最终承受隐私代价的,是最普通的访客。


这次事件为什么值得你关注?

你可能在想:这不就是开发者圈吵吵嚷嚷吗?我又不用 WebKitGTK 浏览器,跟我有什么关系?

其实关系很大。下面这几类读者都应该关心这件事:

1. 普通用户:你的"匿名浏览"可能已经失效

如果你曾经以为开了浏览器的"严格隐私"模式就万事大戒,Cloudflare Turnstile 的这次升级告诉你:远远不够。WebGL 指纹在很多主流浏览器上还是能稳定识别你的设备。而且现在有无数网站使用 Turnstile——比如 Cloudflare 自家的客户群体就覆盖了全球数百万站点。

2. 站长/开发者:你的用户体验正在悄悄变差

你本来接入 Turnstile 是为了"减少机器人的同时不打扰真人"。但现在,如果你的用户群里有人用 WebKit 内核的浏览器、装了反指纹扩展、或者开了 Firefox 的严格隐私——他们可能直接进不来你的网站,而你连"被谁挡住"的提示都看不到。

3. 隐私法务:这是 GDPR/ePrivacy 的灰色地带吗?

按欧盟 GDPR 的规定,收集可识别设备的信息需要"合法依据"(用户的明确同意)。但 Turnstile 的指纹收集是在用户进入第三方网站时自动发生的,没有显式同意。这是不是符合 GDPR 精神,已经有欧洲律师在讨论。

4. 普通网民:互联网"反隐私"基础设施的边界正在扩张

从浏览器指纹、到设备指纹(结合屏幕分辨率、字体、时区等)、到行为指纹(鼠标轨迹、打字节奏)——互联网平台对"识别你"这件事越来越执着。每一次小升级,都是在大坝上加一块砖。


几个你可以立刻做的事

1. 检查自己最常用的网站用的是什么验证。 打开 DevTools 看脚本域名,如果发现 challenges.cloudflare.comturnstile.cloudflare.com,意味着你的访问已经被加入指纹采集。

2. 真正在意隐私的用户,考虑 Brave 或 Tor Browser。 这两款浏览器对指纹防护做得更彻底(虽然 Tor Browser 在某些 Cloudflare 站点也会被拒,这是另一个故事)。

3. Firefox 用户:手动开启 privacy.resistfingerprintingabout:config 中搜索并启用这个选项。代价是某些网站可能显示异常,但对隐私敏感的用户是值得的。

4. 站长:关注 Cloudflare 的官方更新。 如果你的网站启用了 Turnstile 严格模式,建议跟踪 Cloudflare 后续是否会提供"指纹降级"开关,并准备好在需要时切换到 reCAPTCHA、hCaptcha 或自建验证方案。


写在最后

这件事的真正意义,不在于 Cloudflare 是不是"坏人"——他们有自己的反爬压力和商业考量。

它在于揭示了一个越来越明显的趋势:互联网的"反垃圾基础设施",正在悄悄变成"反隐私基础设施"。

每一次反爬升级、每一次"更聪明的人机识别",都不可避免地加深对用户设备的了解。问题不是"Cloudflare 做错了什么",而是"我们愿意为防机器人付多大的隐私代价"。

目前看来,整个行业还没有认真讨论过这个权衡。Cloudflare Turnstile 的这次升级,更像是一次单方面的扩张。

下一次,当有人告诉你"这只是为了证明你是人类"的时候,或许可以多想一秒:

为了证明你是"人类",它需要知道多少关于你的事?


参考来源

  • 原文:Haelwenn Monnier, "Cloudflare Turnstile requiring fingerprintable WebGL" - hacktivis.me
  • Hacker News 讨论(569 赞 / 322 评论)
  • Bugzilla: Gecko reveals sanitized GPU Characteristics (Bug 1916271)
  • Cloudflare Turnstile 官方测试页:browser-compat.turnstile.workers.dev