email - 无密码身份验证的缺点是什么?
问题描述
在使用密码支持的身份验证的情况下,如果用户忘记了密码,提供商始终信任用户的电子邮件安全。
那么为什么要大惊小怪呢?为什么不使用电子邮件将秘密登录密钥发送给注册用户?当用户忘记密码时,这不是网站所做的吗?
仍然使用密码进行身份验证的原因是什么?有密码的身份验证缺少的无密码身份验证的主要问题是什么?
解决方案
一个区别是,如果您通过忘记密码登录,您通常必须将密码更改为其他密码,因此无法被发现 - 很可能会发现攻击者。如果它只是电子邮件中的登录链接,情况并非如此,攻击者可以登录,并且可能没有人注意到。当然,可以通过控制来缓解这种情况,但它很快就变成了一个用户体验问题。
如果只有登录链接,另一个用户体验方面必须一直访问您的电子邮件。很多人使用密码管理器,这使得输入非常安全和独特的密码变得非常容易。如果它是一个登录链接,您必须打开您的电子邮件,从而中断您在应用程序中的流程。这可以说是不方便的。
此外,电子邮件中发送的登录链接将在 url 中包含一个令牌。这将被浏览器记住,登录到中间代理,登录到 Web 服务器日志等等。不应在 url 中发送秘密。但是,如果它是在(非常)有限时间内有效的一次性令牌,那么这种风险就会大大减轻。
说了这么多,有些商业应用程序选择通过电子邮件链接进行无密码登录。如果实施正确(具有足够熵的足够强大的一次性令牌,使用适当的加密随机生成器生成等等),通过电子邮件链接的无密码登录对于许多应用程序来说足够安全,而且它主要是一个 UX 问题(保持请注意上述安全注意事项)。
推荐阅读
- powershell - 如何在Powershell中查找具有特定起始和结束字符的特定字符串
- reactjs - 尝试导入 chartjs-plugin-datalabels 时出现错误“TypeError: Cannot read property 'extend' of undefined”
- java - Java:类型不适用于参数(K)
- c# - 带有 SignalR 和动态 DNS 解析的 NGINX 反向代理
- java - 投射到另一个对象时出现Classcastexception,目前正在使用power mockito进行测试?
- php - laravel,为任务调度创建心跳
- python - Amazon lex 不保存未定义的自定义槽值
- python - 如何在python中将变量移到函数之外
- spring-boot - 我正在尝试对我的 springBoot 控制器进行单元测试。但我似乎找不到如何检查参数是否正确
- c# - 多个 Npsql 连接