Web 安全太难了
摘要
Eric Lawrence 批评了 Cloudflare 新的 Wallet 注册流程,指出它与同意式钓鱼攻击极为相似,说明了为什么 Web 安全如此困难。
暂无内容
查看缓存全文
缓存时间: 2026/08/04 19:47
# Web安全太难了
来源:https://textslashplain.com/2026/08/04/security-is-hard-yall/
一切始于一个看似无害的巧合。我在推特上看到一条消息,说我最喜欢的公司之一 Cloudflare 推出了一项新产品。
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-33.png?ssl=1)
有意思!我点击进入网站,然后看到了它:
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-32.png?ssl=1)
而且***太棒了**!* 我喜欢的用户名 `@ericlaw` 竟然还可用。**我得赶紧去抢注**,免得被别人抢先了!
既然我本来就是 Cloudflare 的老用户,我只需要登录就行。这很合理,不然他们怎么把这个用户名绑定到我的账户上呢?
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-34.png?ssl=1)
轻轻松松。我进来了。看起来还差最后一步——我需要授权这个新功能?
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-35.png?ssl=1)
*等等!*
这个界面看起来**完全就是**过去几年非常流行的那些[授权钓鱼攻击](https://textslashplain.com/2023/01/11/attack-techniques-priming-attacks-on-legitimate-sites/#:~:text=in%20this%20post.-,%E2%80%9CConsent%20Phishing%E2%80%9D,-In%20the%20first)!
而且等一下,为什么入口是在 `cloudflare.pay`——一个*并不*已经有我凭据的网站,而不是放在 `cloudflare.com` 域名下的某个页面(比如 `cloudflare.com/pay`)? **.com 域名和 .pay 域名之间没有任何内在的技术关联**。`\.pay` 这一 sTLD 下的域名对任何人开放,只要花 20 美元就能注册(https://tld-list.com/tld/pay)(不像 `.bank` 那样需要更严格的审核),所以我完全可以在几分钟内注册一个自己的 `cloudflarepayments.pay` 域名。
还有,为什么 Cloudflare 的授权页面连自己公司的功能都不认识?还有那个绿色的勾看起来也太可疑了——攻击者完全可以把那个 emoji 塞进他们迷惑性的显示名称里,就像那些试图[钓鱼微软邮箱账户](https://textslashplain.com/2023/01/11/attack-techniques-priming-attacks-on-legitimate-sites/#:~:text=granting%20the%20attacker%20access%20to%20the%20content%20of%20their%20account)的人用误导性的应用名称和图标一样:
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-39.png?ssl=1)
伪造的 Outlook OAuth 钓鱼请求
**Cloudflare 那些人个个都是天才,懂得很。这*肯定*是个攻击。** 而且是个巧妙的攻击——我之所以有一种[紧迫感](https://textslashplain.com/2023/10/16/security-the-impact-of-time/#:~:text=fast%2Dmoving%20attackers.-,The%20Human%20Factor,-Many%20forms%20of),是因为我想“赢得”抢注心仪用户名的竞赛。*非常非常聪明!*
遗憾的是,Cloudflare 的授权页面没有遵循[最佳实践](https://textslashplain.com/2023/01/11/attack-techniques-priming-attacks-on-legitimate-sites/#:~:text=nuked%20from%20orbit.-,Best%20Practices,-When%20building%20web),所以页面上没有“**举报可疑请求**”的链接,我无法借此让 Cloudflare 的人知道他们的客户正遭受攻击。
让我回到 Cloudflare 仪表板,试着从侧边栏找到 Wallet 功能。嗯。**那里没有这个功能。**不过 Wallet 号称是“新功能”,也许仪表板只是还没更新而已。搜索一下文档,什么也没找到。那就问问聊天里的 AI 代理吧。
聊天代理一开始就要求访问我的账户:
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-41.png?ssl=1)
这感觉有点奇怪,但页面仍然是 `cloudflare.com`,所以我想我大概可以给它访问那些它本来就已经能访问的东西的权限。奇怪的是,AI 代理首先提议让我授予它**完全控制**权限,而不是**只读**权限,这感觉有违最小权限原则,不过反正我也没必要问什么与账户相关的特定问题。授予读取权限后,代理允许我提问了:
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-36.png?ssl=1)
哦,哇。**Cloudflare 说那确实*是*一个攻击!** 那我们马上去[举报这个钓鱼](https://textslashplain.com/2023/01/19/defense-techniques-reporting-phish/)吧!
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-38.png?ssl=1)
几分钟后……唉,可惜……
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-37.png?ssl=1)
*天哪。*
又疯狂搜索了几分钟后,才发现这实际上是 Cloudflare 一个合法的新产品,也是一个合法的网站,尽管它给人的每一个暗示都像是一个巧妙的钓鱼攻击。
而且[事实证明](https://x.com/WillPapper/status/2084701868090093736),那个可疑的绿色勾并不是应用不可信显示名称的一部分,而是一个([位置很糟糕](https://textslashplain.com/2017/01/14/the-line-of-death/))安全 UI 元素,用户应该将鼠标悬停在上面以获取安全详情:
[](https://i0.wp.com/textslashplain.com/wp-content/uploads/2026/08/image-40.png?ssl=1)
Cloudflare 的人显然希望安全问题通过 HackerOne(https://www.cloudflare.com/disclosure/)上报(*但那个网站不让我登录,因为 HackerOne 使用的 Cloudflare CAPTCHA 似乎[坏了](https://x.com/ericlaw/status/2084713054609064046)...*)。
当合法网站有时表现得非常非常像钓鱼网站时,想想 [Microsoft SmartScreen](https://textslashplain.com/2025/04/07/understanding-smartscreen-and-network-protection/) 和 Google SafeBrowsing 这样的 URL 信誉服务在每周数以百万计的新网站加入网络的情况下,要在不误报的情况下拦截恶意网站是多么困难。
## 经验教训
**Web 开发者们**,请遵循每一条最佳实践,**我*求求*你们了**:
- 将应用和内容托管在你受信任的域名下(例如 `cloudflare.com/pay` 或 `pay.cloudflare.com`。*如果必须使用新域名,请从你受信任域名下的页面直接链接过去。*)
- 在要求用户做安全决策时,在一个[可信的位置](https://textslashplain.com/2025/12/03/security-surfaces/)展示相关的安全信息。
- 让[举报诈骗](https://textslashplain.com/2023/01/11/attack-techniques-priming-attacks-on-legitimate-sites/#:~:text=nuked%20from%20orbit.-,Best%20Practices,-When%20building%20web)在上下文环境中(例如在授权请求页面上)变得轻而易举。
- 测试你的安全举报流程,确保它们确实有人监控并且功能正常。
**用户们**:请在外面注意安全。点击之前先想一想,如果一切都不管用,那就***等一等(https://textslashplain.com/2023/10/16/security-the-impact-of-time/)***。
**安全极客们**:永远不要责怪受害者——他们面对的是不可能完成的任务。
——Eric
相似文章
基于网页的密码学永远是骗局
该文章认为,基于网页的端到端加密本质上并不安全,因为分发客户端代码的服务器可以推送恶意更新,导致威胁模型不一致。文章还批评了 WhatsApp 和 Signal 等服务存在类似缺陷。
就让我输入数字
一位用户讲述了瑞士AGOV政府登录系统验证码表单中一个令人沮丧的无障碍性错误,并反思了数字身份、年龄验证和在线匿名性等更广泛的问题。
你的智能体现在有钱包了(但它依然没有声誉)
Cloudflare 为 AI 智能体推出钱包,赋予它们身份和可编程消费能力,但作者认为,锚定账户的声誉系统可以通过重新注册来钻空子,这一缺陷被称为“声誉洗白”。
让我输入数字就好
一篇博客文章详细介绍了瑞士AGOV登录系统中的一个无障碍性漏洞,该漏洞导致数字输入失败,并揭示了数字身份系统中更广泛的问题。
Cloudflare Turnstile 现在要求可指纹识别的 WebGL
Cloudflare 的 Turnstile 现在要求使用 WebGL 指纹识别进行设备验证,从而阻止了 WebKitGTK 浏览器并引发隐私担忧。