密码重置安全选项 - 这两个选项中哪一个更安全


Password reset security options - Which of these 2 options are more secure

我对程序员关于密码重置功能的推理有一点了解。有人可以告诉我以下哪个更安全,或者它们是否相等?

选项 1:向用户发送一封包含以下内容的电子邮件:

Url: http://mysite/reset/user%mail.com
CODE: 57583

然后,用户将转到一个页面,他们必须在其中手动输入代码,但电子邮件已填充在 Web 表单上。

选项 2:向用户发送以下电子邮件:

URL: http://mysite/reset/user%mail.com&code=57583

不是程序员,很抱歉,如果这是一个简单的问题,或者如果我的第二个 url 格式不正确,我的观点是,在示例 1 中,用户必须手动输入代码,而在第二个示例中,表单预先填充了代码。

那么,它们是否实际上与另一个一样安全,或者其中一个是否具有显着的安全优势?

由于您已经通过URL公开了用户的电子邮件,因此添加密钥并不会真正降低其安全性。

您可以通过完全不公开用户的电子邮件来提高安全性 - 在令牌中隐藏电子邮件:mysite.com/reset/some-token?key=[key]

并在页面中不显示电子邮件:email@d****.com

这样,人们就无法使用暴力手段来查看人们是否是您系统中的注册人。 对于大多数网站来说,这可能不是问题,但我可以看到一些用例,其中不公开电子邮件和/或注册人列表很重要。

两者同样安全 - 如果电子邮件到达用户的收件箱,并且该电子邮件映射到您网站上的该用户帐户,则可以安全地假定它是您想要的用户。您可以通过允许用户添加备用电子邮件来增加安全性,当他们将密码重置代码发送到 Email-A 时,您会向所有其他电子邮件地址发送通知,指出"嘿,您或某人向 Email-A 发送了密码重置电子邮件。如果这不酷,请单击此处"

它们都是平等的,因为在这两种情况下,电子邮件将包含相同的信息。

第二个选项对我来说似乎更加用户友好。但是您可以轻松地同时提供两者(因为有人有一个邮件客户端,不允许打开 URL......

就个人而言,我认为这两种方法同样安全(方法 2 更加用户友好)。

但是,您应该使用更长的代码。否则,它们很容易被猜到,攻击者可以通过猜测重置令牌来随意重置密码。

我会选择第二种选择。 与第一个相比,它不会造成任何伤害,它将改善用户体验/可用性。

正如其他人所提到的,两者都同样安全,第二个选项更加用户友好。然而,至关重要的是,攻击者不能轻易猜到"代码"。这意味着您应该避免按顺序或使用一些易于猜测的算法生成代码。最后,作为对任何猜测攻击的预防措施,如果您认为某个 IP 地址试图错误地猜测代码,您可能希望实施基于 IP 的阻止。另一种选择可能是锁定用户帐户,使其在代码被猜错 10 次时重置密码(例如)。