忘记密码页面,但密码经过哈希处理

时间:2011-03-08 16:41:02

标签: php hash password-recovery saltedhash

我需要实现一个忘记密码页面,但我的密码是咸的&散列。所以我不能按常规检索它们。我的想法是做以下事情:

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

  • 他们的密码被重置为哈希值 &安培;我做的盐渍密码。然后,我发送 给他们的电子邮件,其中包含一个 链接到他们可以的新页面 输入新密码。

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

  • 我只是从链接中获取$ _GET变量,对数据库中的条目进行身份验证以及哈希&加密新密码并插入db。

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

提前致谢。

5 个答案:

答案 0 :(得分:6)

听起来不错;但是,对于一个更常去的网站的总体安全性,一个稍微不同的方法值得考虑:

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

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

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

  • 如果用户未在24小时内做出反应(即使用新密码登录),请从第二栏中删除密码

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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