密码重置安全选项 - 这两个选项中的哪个更安全[关闭]
Posted
技术标签:
【中文标题】密码重置安全选项 - 这两个选项中的哪个更安全[关闭]【英文标题】:Password reset security options - Which of these 2 options are more secure [closed] 【发布时间】:2013-01-07 07:51:24 【问题描述】:我对我的程序员关于密码重置功能的推理有了一点了解。有人可以告诉我以下哪个更安全,或者它们是否相等?
选项 1:向用户发送一封包含以下内容的电子邮件:
Url: http://mysite/reset/user%mail.com
CODE: 57583
然后用户会被带到一个他们必须手动输入代码的页面,但电子邮件已填充到网络表单中。
选项 2:向用户发送以下电子邮件:
URL: http://mysite/reset/user%mail.com&code=57583
我不是程序员,如果这是一个简单的问题,或者我的第二个网址格式不正确,我很抱歉,我的意思是,在示例 1 中,用户必须手动输入代码,而在第二个示例中表单已预先填充了代码。
那么它们是否会像另一个一样有效地安全,或者它们是否具有显着的安全优势?
【问题讨论】:
我不会说它们中的任何一个都会带来任何真正的安全风险。好的,首先我会在 MD5/SHA 或其他散列中使用“代码”来 /kind of / 对其进行一点加密。我希望“用户”可以输入他们的详细信息进行重置,然后通过电子邮件向他们发送一个“重置链接”,其中他们的新临时密码仅通过电子邮件发送,他们必须在其中输入密码。所以用户必须手动输入他们的新密码而不是代码。希望这会有所帮助:) 我会结合您的电子邮件地址和您的代码并对其进行加密以获得哈希值。将电子邮件中的哈希作为 mysite/reset/hash 发送,然后使用它。 使用选项 1 您将获得非常微不足道的安全优势,但不足以产生重大影响。但是,它的缺点是对用户不太友好。 【参考方案1】:由于您已经通过 URL 公开了用户的电子邮件,因此添加密钥并不会真正降低安全性。
您可以通过完全不暴露用户的电子邮件来提高安全性 - 在令牌中隐藏电子邮件: mysite.com/reset/some-token?key=[key]
并且在页面中不显示电子邮件: email@d****.com
这样人们就无法使用暴力方法来查看人们是否是您系统中的注册人。对于大多数网站来说,这可能不是问题,但我可以看到一些不公开电子邮件和/或注册人列表很重要的用例。
【讨论】:
【参考方案2】:两者同样安全 - 如果电子邮件到达用户的收件箱,并且该电子邮件已映射到您网站上的该用户帐户,您可以放心地假定它是您想要的用户。您可以通过允许用户添加备用电子邮件来增加安全性,当他们将密码重置代码发送到电子邮件 A 时,您会向所有其他电子邮件地址发送通知,说“嘿,您或某人向电子邮件 A 发送了密码重置电子邮件. 如果这不酷,请点击这里"
【讨论】:
【参考方案3】:它们是平等的,因为在这两种情况下,电子邮件将包含相同的信息。
第二个选项对我来说似乎更加用户友好。但是你可以很容易地同时提供两者(因为有人有一个邮件客户端,它不允许打开 URL...)
【讨论】:
【参考方案4】:就个人而言,我认为这两种方法同样安全(方法 2 对用户更友好)。
但是,您应该使用更长的代码。否则它们很容易被猜到,攻击者可以通过猜测重置令牌随意重置密码。
【讨论】:
【参考方案5】:我会选择第二个选项。与第一个相比,不会造成任何伤害,它将改善用户体验/可用性。
【讨论】:
感谢大家的回答和建议。不幸的是,我不是程序员,所以我现在只能吸取你的知识。【参考方案6】:正如其他人所提到的,两者都同样安全,第二个选项对用户更友好。然而,攻击者不能轻易猜到“代码”,这一点至关重要。这意味着您应该避免按顺序生成代码或使用一些容易猜测的算法。最后,作为对任何猜测攻击的预防措施,如果您认为某个 IP 地址正试图错误地猜测代码,您可能希望实施基于 IP 的阻止。如果密码被猜错 10 次(例如),另一种选择可能是锁定用户帐户以防止密码被重置。
【讨论】:
以上是关于密码重置安全选项 - 这两个选项中的哪个更安全[关闭]的主要内容,如果未能解决你的问题,请参考以下文章