是一个像这样安全的php密码重置功能?

时间:2013-06-03 08:38:37

标签: php security

我的网页上有一个区域由以下脚本保护:http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL 我现在需要的是忘记密码时的某种密码重置功能。 只有少数用户,我尽量让它变得简单。

所以我认为它会起作用:

  1. 用户输入电子邮件地址
  2. 用户收到一封电子邮件,其中包含sha512-hashed密码及其用户名为GET参数的链接
  3. 脚本检查用户名和密码哈希适合
  4. 用户现在可以输入新密码
  5. 是否存在任何强大的安全漏洞,或者这是一种常见方式吗?那是什么最好的做法?我真的不想要任何额外的安全问题或类似的东西......

    更新:密码经过哈希处理和加密。

3 个答案:

答案 0 :(得分:10)

这不像应该的那样安全。

您正在通过电子邮件(不安全)发送用户名和密码(通常以难以逆向工程的形式) - 并且这些用户名和密码可能会在其他网站上重复使用。

使用随机生成的字符串,而不是任何真实的凭据。将随机字符串存储在数据库中,并使用它来查找要重置密码的用户。只允许字符串在有限的时间内工作。

答案 1 :(得分:2)

以下是试验性的流程:

  1. 用户点击“密码重置”链接。
  2. 电子邮件将发送给注册的地址用户。
  3. 电子邮件包含一个在1小时后过期的唯一链接。
  4. 用户点击链接并转到带有密码字段的页面。
  5. 用户输入新密码,密码被哈希并保存。
  6. 仅供参考,您绝不应以任何方式传输密码或其哈希值。

    1. 密码不应以原始格式保存或以无保留的哈希值保存。
    2. 不应传播哈希。

答案 2 :(得分:1)

加密密码哈希的唯一位置应该在您的服务器后端,而不是其他地方。

攻击者可以使用几乎无限的处理能力来强制执行哈希,如果他有要检查的哈希值,而在任何其他情况下,他们将不得不受到服务器容量的限制,您将立即意识到。

如果您想保证其安全,请生成随机密码重置密钥并将其发送到用户的注册电子邮件(并且没有其他 - 电子邮件安全性是用户的问题)。如果用户使用该密钥返回到站点(通常是GET参数),则可以让用户访问密码更改表单。

据我所知,这是目前最常见和最安全的密码重置方法之一(尽管有2个身份验证等)。