忘记登录 - PHP 问题

问题描述 投票:0回答:8

我有一个需要用户名和密码的登录系统。

创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我对密码进行 md5 并将其存储在数据库中......

我的问题是如何实现忘记登录页面并对密码进行 md5 处理......我想创建一些自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址......但我正在努力弄清楚如何实现这一点,因为我永远无法访问明文密码,只能访问加密密码......

php jquery html authentication md5
8个回答
1
投票

您不会通过电子邮件向用户发送密码。 您通常会通过电子邮件向他们发送新的自动生成的临时密码。


0
投票

您生成一个新的随机密码并将其通过电子邮件发送给他们。 恢复密码是不切实际的,这是存储哈希值而不是密码的部分原因。 它使安全漏洞变得不那么严重。


0
投票

您根本不需要发送用户旧密码。

您可能可以发送 1 次身份验证链接(无需密码即可登录用户)或仅发送新生成的密码。


0
投票

您会注意到,大多数(信誉良好!)网站只允许您重置密码,而不向您提供旧密码。

这就是原因。 :)


0
投票

当您使用 md5 密码时,几乎不可能获得明文密码。您需要做的是“重置”密码:将其设置为其他内容并将其通过电子邮件发送给用户


0
投票

以下是一些选项:

  • 在注册过程中,您可以要求用户设置一些“秘密问题和答案”。

    • 当用户初始化重置密码功能时,他可以回答这些问题并重置他的密码。
    • 或者,正确回答问题后,您可以通过电子邮件向他发送新的临时密码。
  • 您可以通过电子邮件向他们发送特殊链接。单击此链接后,他们可以设置新密码。


0
投票

发送包含用户密码的电子邮件是一种不好的做法(一旦密码经过 md5 处理就几乎不可能)。一种替代方法是:

获取用户的电子邮件并发送允许用户更改密码的电子邮件链接。该链接应该存储在另一个数据库表中,并且应该有某种与之关联的长唯一 ID。当请求链接时,显示一个表格以更改密码。然后,

md5()
新密码并替换数据库中用户的密码。

if($_POST['submit'] == 'Send Reset Password Link') {
    if(//User exists & email is valid (check mysql)) {
        $db->prepare('INSERT INTO reset VALUES('', :email, :linkid)');
        //etc...
        mail($email, 'Password Reset for myawesomesite.com', 'Here is your link: http://www.myawesomesite.com/reset.php?id='.$linkid.'&email='.urlencode($email));
        echo "Email sent";
    }
}

重置.php:

if(isset($_GET['id']) && isset($_GET['email'])) {
    $q = $db->prepare('SELECT id FROM reset WHERE email=:email AND linkid=:linkid');
    $q->bindParam(':email', $_GET['email']);
    $q->bindParam(':linkid', $_GET['id']);
    $q->execute();

    if($q->rowCount() == 1) {
        //Show password reset form
    } else {
        echo "Reset link invalid";
    }
}

然后您可以使用

UPDATE users WHERE email='' SET password=''

重置密码

编辑
我建议不要向用户发送临时密码,除非您的忘记密码表单在用户电子邮件之外还有一层安全保护。如果没有,任何知道用户电子邮件的人都可以重置其密码。此外,电子邮件通常未加密,我认为通过电子邮件发送密码(临时或非临时)并不安全。


0
投票

美好的一天,请帮帮我,我有一个链接 https..login.phpviewfogot 我无法登录过去两天尝试的写入页面,但没有成功

© www.soinside.com 2019 - 2024. All rights reserved.