我正在考虑仅使用一次性密码构建一个网站用户身份验证系统:每次通常使用普通密码(例如,每次使用一次),用户都会在电子邮件中获得一个密码。用于注册,登录,冒险操作和帐户删除。
我看到的一些似乎并不严重的问题:
我没有看到这种方法在野外提及或使用。它有什么主要缺点吗?非常感谢!
答案 0 :(得分:4)
仅通过电子邮件发送OTP比仅使用密码更安全(这基本上就像是强迫用户每X个小时更改一次密码)。
我想同时解决您的一些非关键问题,并强调一些缺点。
您不必存储所有会话,仅存储无效的会话,也不必存储会话的最大持续时间。
实际上 是一个问题-它告诉您电子邮件所有者使用了该网站,这是一个隐私问题,但是不大。
但是,这是一个攻击媒介。假设此电子邮件存在并且链接到真实的人,攻击者可以抓取您的用户列表,或只是在其他站点上攻击该用户。而且,他们可以代表他们发出过多的OTP请求,我将稍后解决。
所有这些,没有任何理由仅仅因为OTP会出现这个问题。用户可以请求OTP,并且您始终可以使用“如果注册了电子邮件地址hello@world.com,则向其发送了一次性密码”进行答复。这仅具有轻微的可用性含义。
如果攻击者可以使用针对hello@world.com的OTP请求来泛洪您的站点(来自不同的IP地址),则您可以阻止该用户(即,该用户已被DoS处理),否则您的站点将泛洪用户的邮箱,该邮箱可以使该邮件服务器将该站点标记为垃圾邮件发件人。
这也可以在带有密码重置电子邮件的普通站点中完成,但这就是为什么您通常希望用户列表是机密的。
仅适用于OTP的登录假定您要登录的设备也已登录到链接到此站点的邮件帐户。否则,用户必须登录到邮件帐户才能登录到您的站点。
安全界正在推动多因素身份验证,其中密码通常是首要因素。最好的做法是至少允许2FA供选择的用户使用。
如果由于某种原因(例如,他们使用工作或大学的电子邮件)而无法再访问用户的电子邮件帐户,则他们将无法登录,甚至无法将其电子邮件地址更改为新的电子邮件地址。
如果该站点使用率很高,那么它将一直不断地向各种公共电子邮件服务发送很多电子邮件。
仅此一项就可能导致该网站被标记为垃圾邮件发送者,甚至被标记为限速邮件。
如果确实受到速率限制,则某些用户将无法登录。