仅 OTP 身份验证

Max*_*kiy 2 authentication passwords one-time-password

我正在考虑构建一个仅使用一次性密码的网站用户身份验证系统:每次通常使用普通密码(例如注册、登录、危险操作和帐户删除)时,用户都会在电子邮件中收到一个密码。

我看到的一些问题似乎并不重要:

  • 无法更改密码以使所有现有会话无效 - 可以通过在服务器端存储会话并有办法使它们对用户无效来解决
  • 任何人都可以检查某个电子邮件是否在系统中注册 - 对于通用网站来说这似乎不是一个关键问题
  • 任何人都可以为任何电子邮件请求 OTP - 将使用每个远程连接的 API 限制和每小时 1 个未使用的 OTP 的限制来处理

不过,我没有看到这种方法被提及或在野外使用。它有什么主要缺点吗?非常感谢!

roo*_*oot 7

仅通过电子邮件进行的 OTP 比仅使用密码更安全(这基本上就像强迫用户每隔 X 小时更改一次密码)。

我想解决一些非关键问题,并强调一些缺点。

非关键

使会话失效

您不必存储所有会话,只需存储无效的会话,并且仅存储会话的最大持续时间。

检查用户(电子邮件)是否已注册

这实际上一个问题 - 它告诉您电子邮件所有者使用该网站,这是一个隐私问题,尽管很小。

但更重要的是,它是一个攻击媒介。攻击者可以抓取您的用户列表,或者只是在其他网站上攻击该用户,假设该电子邮件存在并链接到真人。此外,他们可以代表他们发出过多的 OTP 请求,我稍后会解决这个问题。

综上所述,这个问题不会仅仅因为 OTP 而出现。用户可以请求 OTP,并且您可以随时回复“如果电子邮件地址 hello@world.com 已注册,则已向其发送一次性密码”。这仅具有轻微的可用性影响。

任何人都可以为任何电子邮件请求 OTP

如果攻击者可以通过 hello@world.com 的 OTP 请求淹没您的站点(从不同的 IP 地址),您要么阻止该用户(即该用户已被 DoS 攻击),要么该站点将淹没该用户的邮箱,这可以让邮件服务器将该站点标记为垃圾邮件发送者。

这也可以在带有密码重置电子邮件的普通网站中完成,但这就是为什么您通常希望您的用户列表保密。

更大的缺点

可用性

仅 OTP 登录假定您登录的设备也登录到链接到此站点的邮件帐户。否则,用户必须登录邮件帐户才能登录您的网站。

单因素身份验证

安全社区正在推动多因素身份验证,其中密码通常是第一个因素。一个好的做法是至少允许选择的用户进行 2FA。

账户锁定

如果用户的电子邮件帐户由于某种原因而无法再访问(例如,他们使用了工作或大学电子邮件),他们将无法登录,甚至无法将其电子邮件地址更改为新的电子邮件地址。

电子邮件活动

如果该网站被大量使用,那么它将一直不断地向各种公共电子邮件服务发送大量电子邮件。

仅此一点就可能导致该网站被标记为垃圾邮件发送者,甚至受到速率限制。

如果确实受到速率限制,某些用户将无法登录。