你可能不知道,每当你打开ChatGPT的对话框,准备敲下第一个字的时候,一场不为人知的暗战已经打响了。
就在上周,一位安全研究员干了一件很疯的事——他把Cloudflare给ChatGPT做的人机验证程序给彻底解密了。377个样本,100%成功。
解密结果让人后背发凉:这玩意儿根本不是传统的验证码。它在监控你的浏览器有没有"真的"跑完ChatGPT的整个React应用。
没错,它检查的是你电脑里那些看不见摸不着的代码状态。
你的浏览器正在被"解剖"
先搞清楚这程序在干嘛。
它不看你输入了什么,也不看你点了哪里。它在扫描你浏览器的55个"身体指标",分三层:
第一层是传统的浏览器指纹。GPU型号、屏幕分辨率、内存大小、硬件并发数、已安装字体,甚至还有一个隐藏的div来测量字体渲染的精确像素。这套东西其实挺常见的,广告商用了十几年。
第二层是Cloudflare网络。你的城市、IP、经纬度,还有"userRegion"这些边缘节点信息。这些是服务器端直接注入的,如果你没走Cloudflare的网,这些字段压根不存在。
第三层才是最狠的——React应用状态。
它检查三个东西:__reactRouterContext、loaderData、clientBootstrap。
这三个玩意儿是什么?它们是React Router在DOM里挂载的内部数据结构。只有当ChatGPT的前端代码完全加载、渲染、并且完成水合(hydration)之后,这些东西才会出现在内存里。
说人话就是:你必须真的把ChatGPT网页完整打开,它才让你打字。
一个headless浏览器模拟器如果只加载HTML但不执行JS,它过不了这关。一个写死浏览器API的爬虫框架,如果没真正跑React,它也过不了这关。
这是直接在应用层抓_bot,不是在浏览器层抓_bot。
"加密"?其实就是皇帝的新衣
好玩的来了。
这位研究员发现,Cloudflare发送的验证程序是加密的。整整28,000个字符的base64,每次请求都会变。
他一开始以为这是什么高深的加密技术。结果解密到最后,发现所谓的"加密"就是XOR运算,而那个密钥——
就在载荷里。
具体来说,程序里有一段19KB的加密Blob,解密它的密钥是一个浮点数,比如97.35,直接写在程序指令里。服务器发给浏览器的所有东西里,就带着解密的钥匙。
这位研究员验证了50次,50次都能用这个方法成功解密。
这就好比有人给你寄了一个锁着的保险箱,然后把钥匙也放在同一个包裹里。
当然,Cloudflare的目的不是真的防住专业人士,而是让静态分析变得麻烦,让网站运营者自己也无法直接看到它在收集什么指纹,让每个token都长得不一样没法重放攻击。
但你要说这是"加密",那就有点幽默了。
真正的武器:行为监控
除了Turnstile之外,OpenAI还跑了另外两个程序。
一个叫Signal Orchestrator,271行指令,装了一堆事件监听器:keydown、pointermove、click、scroll、paste、wheel……它监控你打字的速度节奏、鼠标滑动的速度、滚动页面的模式、空闲时间、甚至你粘贴内容的时机。
36个window属性实时追踪这些行为特征。这叫行为生物识别。
另一个是工作量证明(Proof of Work),就是让你电脑算一道数学题。但说实话,这个主要是增加计算成本,72%的请求5毫秒内就能算完,根本不算真正的门槛。
真正的防线是前面的55个指纹检查,加上行为监控。
用户体验?那又是另一个故事了
有趣的是,评论区炸了。
有人吐槽:"我现在用Firefox动不动就被卡在验证码里,动都动不了。这叫保护用户?"
有人直接说:"我就想知道,这文章的核心观点是什么?OpenAI希望用户用他们真正的React应用。这……有啥问题吗?"
确实,如果你站在OpenAI的角度,这事完全合理。免费、不用登录的ChatGPT,如果不做限制,分分钟被人薅秃。他们得把有限的GPU留给真人用户。
但代价是什么呢?
代价是我们每次打开ChatGPT,都得多等几秒钟让这套验证程序跑完。代价是有些用户的浏览器就是被标记成"可疑",然后陷入无尽的验证码循环。代价是这套东西的复杂性,最终都由普通用户来买单。
一位OpenAI的员工在评论区现身说法,说他们一直在监控页面加载时间和首token延迟,尽量减少对用户的影响。
但说实话,这种保证听起来有点像"我们在尽量不让你感觉到疼"。
一点个人看法
写这篇文章的时候,我一直在想一个问题:
AI公司在用AI对抗AI的同时,不得不动用越来越复杂的前端技术来区分人和机器。这个过程本身,是不是也在把Web变得更加封闭、更加不友好?
当一个网页需要检查你的浏览器有没有"真正"渲染完某个React应用才能让你输入内容,这意味着Web正在从"开放的信息平台"变成"需要验明正身才能进入的场所"。
而讽刺的是,这套看起来很先进的防护机制,核心加密居然是XOR加一个明文密钥。
技术有时候就是这样,看起来很高深,拆开了也就那么回事。
但真正的问题是:这场猫鼠游戏,最后谁会赢?
还是说,根本没有赢家——只有用户在中间被反复摩擦?
【MiniMax-M2.1锐评】:这篇文章揭开了AI巨头"人机验证"的神秘面纱,结果发现所谓的黑科技不过是一层皇帝的新衣,而普通用户才是这场军备竞赛中真正的输家。
参考链接:
https://www.buchodi.com/chatgpt-wont-let-you-type-until-cloudflare-reads-your-react-state-i-decrypted-the-program-that-does-it/