如何使用PHP创建忘记密码页面?

如何使用PHP创建忘记密码页面?,php,sql,passwords,Php,Sql,Passwords,我不知道该怎么做。在上面,我有用户、密码和电子邮件输入。够了吗?检查确保密码和电子邮件与用户名匹配后,我会在PHP页面上做什么?这里有一个简单的方法: 你只需要他们的电子邮件地址。让他们输入,然后发送一个带有唯一代码的特殊url到他们的电子邮件中。在这个阶段,不要重置他们的密码,否则任何恶作剧者只需知道他们的电子邮件地址就可以破解其他人的密码 一旦用户打开他们的电子邮件并点击链接,您可以让他们将其更改为他们想要的任何内容。原则上应该这样做: 用户输入有效的用户名,并根据用户列表进行检查 如果找到

我不知道该怎么做。在上面,我有用户、密码和电子邮件输入。够了吗?检查确保密码和电子邮件与用户名匹配后,我会在PHP页面上做什么?

这里有一个简单的方法:

你只需要他们的电子邮件地址。让他们输入,然后发送一个带有唯一代码的特殊url到他们的电子邮件中。在这个阶段,不要重置他们的密码,否则任何恶作剧者只需知道他们的电子邮件地址就可以破解其他人的密码


一旦用户打开他们的电子邮件并点击链接,您可以让他们将其更改为他们想要的任何内容。

原则上应该这样做:

  • 用户输入有效的用户名,并根据用户列表进行检查
  • 如果找到,将向用户发送一封电子邮件,此电子邮件包含一个无法猜测的唯一链接
  • 用户访问此链接以确认他们有权访问与其帐户关联的电子邮件帐户
  • 发送另一封电子邮件时使用的是中新生成的密码,而不是其当前密码。用户密码设置为此新生成的密码
  • 用户现在使用新密码登录,并被迫输入一个新密码-一个他们可以记住的密码

  • 有几种方法可以实现忘记密码:

    秘密问题 当用户注册时,强制他们采用您存储在DB中的秘密问题和答案(散列)。如果用户忘记了密码,您可以询问问题和答案。如果匹配,则允许他们设置新密码

    这样做的缺点是用户可以输入大多数人都知道的简单答案

    电子邮件链接 向他们发送一封带有重置密码链接的电子邮件,通常类似于:

    http://domain.com/passwordreset.php?id=EMAIL_HASH
    
    链接应该在某个点过期(24小时是标准时间)

    生成密码
    随机生成新密码并通过电子邮件发送给他们。当他们登录时,他们必须更改此临时密码。好处是你不必担心薄弱的问题或电子邮件链接的其他专栏。但是你仍然有通过电子邮件发送纯文本密码的风险。

    你需要备份一点

    如何解决此问题将取决于应用程序的安全性和登录协议

    说了这些,我会这么做。由于密码丢失导致登录失败时,请提供恢复密码的链接。此链接将向指定的电子邮件地址发送电子邮件。当用户收到此电子邮件时,他们可以单击需要更改密码并登录的链接。这里的前提是他们拥有电子邮件地址,其他人不会收到这封电子邮件。这不是最严格的协议,但可能足以满足您的需要

    在电子邮件中的链接中,您至少需要用户名和某种密钥来验证试图重置密码的用户。这样就不会通过键入URL来伪造web服务。此外,如果用户没有单击导致发送电子邮件的链接,则不应允许通过电子邮件恢复密码


    同样,这只是一个不确定的初步猜测,因为您没有指定您需要什么。

    要求用户提供密码以恢复丢失的密码不是有点愚蠢吗?如果用户有密码,为什么他们会出现在“忘记密码”页面上?您如何知道他们的密码是什么?您没有以明文形式存储密码,是吗?到目前为止,您还没有接受任何问题的答案-请更改。常见问题解答:当您决定哪个答案对您最有帮助时,单击答案左侧的复选框大纲,将其标记为已接受答案。这让其他人知道你的问题得到了很好的答案。这样做很有帮助,因为它向其他人表明你从中获得了价值the@oezi:他不会被迫接受任何答案。+1,好答案:清晰简洁。电子邮件链接是唯一合适的选择。秘密问题既烦人又不安全,在不首先确认用户拥有电子邮件帐户的情况下重置密码是一个糟糕的主意。@meagar:没错,但它也不是半安全的,因为它依赖于电子邮件地址的安全性。你有这样的想法。这几乎是身份确认的绝对来源。秘密问题如果被逐字逐句地问和回答,是不安全的。。。如果用户将它们视为单独的密码,则它们可能有效。当然,要求用户提供安全问题的有效答案并不容易,但要求用户设计复杂的密码也不能确保他们能够保护密码。