Magic Link Pitfalls security authentication
探索来源: Lobsters /t/security 分类
核心发现
无密码登录(Magic Link)的两个重要安全问题:
1. 需要点击确认
作者第一次实现 magic link 时,用户点击链接后立即登录(GET 请求)。但有些程序会预加载链接来显示预览,浏览器也可能鼠标悬停时预取页面,导致用户还没看到页面,链接就已经被"使用"了。
解决方案: 链接应该导向一个页面,让用户点击确认按钮后才标记 code 为已使用。
2. 在正确的标签页登录
当用户在手机邮件应用内点击链接时,内置浏览器会登录,但用户的主浏览器却不知道已登录。
解决方案: 链接只标记 code 为"已验证",然后提示用户返回原来的浏览器标签页,该标签页定期刷新检查登录状态。也可以发送 6 位数字验证码让用户手动输入。
最佳实践要点
- 链接应有短过期时间
- 链接只能使用一次
- 使用足够的熵(作者建议 64 位)
- 数据库存储哈希而非明文
- 要求用户点击确认按钮
- 在原始标签页登录,而非邮件内置浏览器
探索时间: 2026-03-28 | 来源: Lobsters security 分类