防钓鱼登录:开发者现在可以做些什么(不把UX变成噩梦)

发布: (2025年12月21日 GMT+8 01:59)
10 min read
原文: Dev.to

Source: Dev.to

您真正需要的威胁模型(而非您希望拥有的模型)

大多数账户被盗并不是“天才黑客破解了加密”。它们往往乏味、可扩展且自动化。攻击者不需要击败你的加密算法;他们只需要欺骗人类、重复使用泄露的密码,或窃取会话令牌。

这里有一个令人不舒服的事实:如果你的安全计划假设用户总能注意到“异常”,那么你的安全计划已经失败。 钓鱼页面几乎一模一样。短信可以被拦截。推送通知可以被刷到有人点“批准”。即使团队启用了 MFA,攻击者也越来越多地针对那些设计不够严密的系统部分:恢复流程、客服覆盖、旧版 OAuth 授权以及长期有效的会话。

因此,你的真实威胁模型应至少包括以下现实:

  • 凭证复用是常态。 人们在不同服务之间重复使用密码,凭证填充成本低廉。
  • 钓鱼套件已商品化。 “够用”的钓鱼页面可以在几分钟内部署。
  • 令牌盗窃胜过密码盗窃。 如果攻击者获得了有效的会话令牌,你的密码策略将毫无意义。
  • 恢复是后门。 如果“忘记密码”比主登录更弱,它就会成为主要攻击路径。
  • 社会工程针对的是人,而非代码。 客服代表、版主和管理员是高价值的入口点。

如果你无从下手,先接受这种思维方式:身份验证不是一个界面,而是一个完整的生命周期(注册、登录、会话、提升检查、恢复以及撤销)。攻击者会选择最薄弱的环节。

Passkeys and WebAuthn: Why They Change the Game

密码是共享的密钥。共享的密钥可以被复制、钓鱼、重复使用以及重放。基于 FIDO2/WebAuthn 的 Passkey 颠覆了这种模型:密钥永远不离开设备。设备通过绑定到合法网站来源的加密挑战‑响应来证明拥有私钥,而不是发送用户已知的内容。

这种“来源绑定”是关键特性。这也是为什么 Passkey 常被描述为防钓鱼的:即使假冒站点外观完美,也无法为真实站点完成加密仪式。主要生态系统正朝这个方向发展,阅读像 NIST 对防钓鱼的技术说明 这样的中立、面向标准的文章,有助于了解“防钓鱼”在协议层面的真实含义,而非营销用语。

话虽如此,Passkey 并非魔法。仍需在以下方面进行设计:

  • 注册质量。 如果攻击者在劫持会话后能够自行注册 Passkey,你就让接管变得永久化。
  • 账户恢复。 用户会丢失手机,设备会损坏,平台会更换。
  • 混合环境。 有些用户会使用旧设备、受限的企业终端或共享电脑。
  • 跨设备登录。 基于二维码的流程可以安全,但你的 UI 必须让用户难以批准非自己发起的操作。

更大的观点是:Passkey 能降低整类攻击,但它并不能自动解决恢复机制薄弱、会话管理不当或管理员控制弱等问题。

软肋:恢复、支持与 “我的手机丢了”

团队往往会强化登录安全,却不小心留下一个标有 “support” 的敞开侧门。如果攻击者能够说服支持人员更改账户的电子邮件、禁用 MFA,或在 “这一次” 绕过检查,那么再强的身份验证方式也毫无意义。

一个稳健的恢复理念应当如下:

  • 恢复过程应比普通登录更慢、更审慎。 当风险高时,速度是敌人。
  • 恢复应基于多信号,而非单一信号。 仅凭电子邮件进行重置是脆弱的,因为电子邮件本身往往是其他所有恢复渠道的入口。
  • 高影响力的更改应要求提升验证。 更改电子邮件、添加新认证器、禁用通行密钥、导出数据——这些都是夺取控制权的目标。
  • 支持工具应设有防护栏。 如果你的支持仪表盘可以瞬间完成所有操作,那你实际上已经构建了一个夺权控制台。

同样要关注会话。许多泄露事件之所以成功,是因为会话存活时间过长、刷新令牌未被轮换,或可疑登录未触发提升检查。被盗的 Cookie 可能比被盗的密码更有价值。

注意:原始内容在 “Harde” 之后意外中断。上述 Markdown 保留了该截断,以保持原始材料的完整性。

会话管理

  • 将刷新令牌和会话视为真实凭证(因为它们就是)。
  • 轮换刷新令牌,在适当时将会话绑定到设备上下文,缩短高风险操作的有效期,并在出现可疑事件时使其失效。

将支持运营设计为安全的一部分

  • 限制代表在不升级的情况下可以更改的内容。
  • 记录每一次操作。
  • 要求内部多因素认证。
  • 对有价值账户的不可逆更改实施“二人规则”。

在不显得怪异的情况下管理风险

  • 跟踪明显的红旗(不可能的旅行、新设备 + 高价值操作、重复的失败尝试)。
  • 利用这些信号要求提升验证,而不是悄悄锁定用户。

在不破坏用户体验的情况下发布

最快的失败方式是推出用户讨厌的“完美安全”。
次快的方式是随意增加阻力,让用户学会忽视警告。

更好的发布策略是 渐进且有主见

  1. 为在意的用户提供 Passkey 作为升级选项。衡量完成率。
  2. 将 Passkey 设为新账户的默认,同时保留后备路径。
  3. 仅在用户已预期阻力的时刻(更改邮箱、导出数据、添加新设备)添加提升验证
  4. 对价值更高或风险更大的账户 加强恢复流程,同时让低风险用户保持流畅。

最关键的 UX 细节:清晰度

当 UI 模糊时,人们会批准恶意提示。你的界面应始终回答三个问题:

  1. 正在进行什么操作?
  2. 它从哪里发起的?(此设备、其他设备、浏览器、API)
  3. 如果我批准,会发生什么?

如果你无法在单个屏幕上让这些显而易见,就意味着你再次依赖用户的警惕——这并不是策略。

最终思考

安全正朝着 默认的防钓鱼认证 方向发展,提前适应的开发者以后将花更少的时间来处理账户被劫持的问题。

未来并不是 “更复杂的登录”,而是 更简洁的登录并具备更强的密码学保障,并辅以细致的恢复和支持设计。

如果你为完整的生命周期构建——注册、登录、会话和恢复——你将拥有一个更难被攻破、使用起来更便捷的系统。这就是安全领域罕见的双赢局面。

Back to Blog

相关文章

阅读更多 »