1

我需要实现一个忘记密码页面,但我的密码是加盐和散列的。所以我不能按惯例检索它们。我的想法是执行以下操作:

  • 当用户单击忘记密码链接时,他们自然需要输入他们的电子邮件地址(这也是他们的用户名)。

  • 他们的密码被重置为我制作的散列和加盐密码。然后,我向他们发送一封电子邮件,其中包含指向新页面的链接,他们可以在其中输入新密码。

  • 该链接包含新的散列和加盐密码(作为 $_GET 变量),仅用于身份验证。

  • 我只是从链接中获取 $_GET 变量,针对数据库中的条目和哈希和盐新密码进行身份验证,然后插入到数据库中。

这有多安全?对于不会轻易成为垃圾邮件发送者和暴力攻击者目标的网站。

提前致谢。

4

5 回答 5

6

这听起来不错;然而,为了在更频繁的网站上实现全面安全,值得考虑一种稍微不同的方法:

  • 让用户像往常一样输入他们的电子邮件地址

  • 使用您构建并发送的随机密码填充第二个密码字段

  • 使用生成第二个密码的日期和时间填充附加列

  • 如果用户在 24 小时内没有反应(即使用新密码登录),则从第二列中删除密码

在带有新密码的电子邮件中,向用户说明如果他们没有请求新密码,他们可以忽略它。

这样,输入用户电子邮件地址的第三方就无法通过完全重置密码来阻止用户访问自己的帐户。

于 2011-03-08T16:46:24.537 回答
0

您将用户帐户的安全性外部化为电子邮件帐户的安全性,因此如果他们的 Yahoo/Hotmail/Gmail 密码是“密码”,而您强制执行严格的密码限制,那么有人可能会通过黑客入侵用户的电子邮件进入您的网站帐户。

话虽这么说,您的基本设置很好-我不会担心垃圾邮件发送者会敲击表单-只要您不允许用户提供的文本进入表单,那么发送垃圾邮件就没有意义了-俄罗斯新娘的阴茎丸及时分享特别优惠不会通过。如果一个愚蠢的机器人确实开始敲击表单,你总是可以设置一个限制器,这样每 X 分钟不会超过 1 封未完成的密码重置电子邮件。

于 2011-03-08T16:49:29.713 回答
0

只要您使用良好的散列算法(md5 已损坏,不应用于加密目的)。使用 sha1,这听起来像是行业标准。我通常会加盐并有一个随机密码,然后将它们作为获取变量发送到与它们的链接,用户无需知道新密码或复制/粘贴它。

此外,我不会重置密码来生成此密钥,我将其设置为 1 次授权码,这样如果不是请求重置的用户,他们就不必在他们的电子邮件中找到它或请求重置自己。

于 2011-03-08T16:52:14.803 回答
0

通常您只想向他们发送原始但随机生成的新密码。他们进入重置页面,然后输入新密码。

他们必须在他们的电子邮件中查看它才能确保他们拥有该帐户(在检查您确实有使用该电子邮件的用户之后)。

然后您在 $_GET 中的重置代码可以包含另一个随机字符串(不是密码),让用户输入您发送的生成密码和新密码(确认)。

于 2011-03-08T16:52:18.173 回答
0

雅虎表示,用户应该更改他们使用与雅虎账户相同或类似信息的任何其他账户的密码和安全问题和答案。

该组织正在与客户接洽,以审核他们的可疑移动记录,并考虑使用雅虎帐户密钥,这是一种基本的确认设备,可以消除在雅虎内外使用密钥的需要。我真的希望他们的安全点能帮助用户通过链接恢复他们的帐户 - https://gallery.technet.microsoft.com/Simple-Tips-to-Secure-your-b53badda

于 2017-01-24T09:23:42.177 回答