我正在创建一个应用程序,用户注册后必须验证他们的电子邮件地址。这是通过 OTP 完成的,一旦用户点击注册 API,就会发送该 OTP。如果 OTP 有效,则我们确认注册,否则我们将删除该用户。 当我注册用户时,我还会创建一个与该用户关联的 OTP 对象。 例如,
class Otp{
.
.
.
private User user;
// setter and getter
.
.
}
这是一个场景。假设用户A已注册但尚未验证自己。现在,其他人点击了验证 API,并偶然发送了用户 A 已收到的相同 OTP,并且用户 A 被注册。现在发生这种情况的可能性非常低,因为我的 OTP 长度将是 7-8 个字符长,但不是零。 我认为这是一个安全缺陷。难道所有的 OTP 系统都有这样的缺陷,还是我做错了什么?如果是的话,有人可以建议一个好的 OTP 系统设计吗?
你心中的“偶然”是什么?如果您的应用程序分发 OTP,您可以限制其有效性(例如 24 或 48 小时)并保留 OTP 列表以避免重复使用,或使用确定性加密算法生成唯一但无法猜测的密码。
如果您认为用户 B 只是猜测/暴力破解 OTP,那么任何暴力攻击都会带来安全隐患,您可能会更安全,因为您的 OTP 是真正随机生成的,并且不会受到字典攻击。
由于 OTP 无论如何都只对用户 A 的帐户有效,因此用户 B 也必须正确猜测,这将降低可以安全忽略的可能性。
尝试https://rapidapi.com/frolic-frolic-default/api/cryptify它提供了电子邮件地址的OTP生成和验证