忘记登录 - PHP 问题

Posted

技术标签:

【中文标题】忘记登录 - PHP 问题【英文标题】:Forgot Login - PHP Issue 【发布时间】:2011-11-10 07:41:51 【问题描述】:

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

在创建帐户时,用户输入他们的详细信息(姓名、地址、电子邮件密码等)。我 md5 密码并将它们存储在数据库中....

我的问题是如何实现一个忘记登录页面的 md5 密码..我想创建一些自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址..但我鉴于我永远无法访问明文密码,只有加密密码...

【问题讨论】:

你加盐了吗?如果没有,这可能是个好主意。 @user:如果你还不知道加盐,你可能不应该写一个安全系统。 可笑,奥利。 “如果你不了解量子密码学,你甚至不应该费心保护你的业余 php 应用程序,因为没人会使用它。”检查缓冲区大小等也没有真正意义。 @Oli 公平地说,他/她正在从中学习。如果您从不尝试某事,您肯定无法从中学习。 如果 OP 正在编写 amazon.com,我会同意,但他们显然只是在学习,而且非常棒 - 指出盐渍,不建议举手退休。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

这就是原因。 :)

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

这里有一些选项:

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

当用户初始化重置密码功能时,他可以回答这些问题并重置他的密码。 或者,在正确回答问题后,您可以通过电子邮件向他发送一个新的临时密码。

您可以通过电子邮件向他们发送一个特殊链接。单击此链接后,他们可以设置新密码。

【讨论】:

【参考方案7】:

发送包含用户密码的电子邮件是一种不好的做法(一旦密码被 md5'ed 几乎是不可能的)。一种选择是:

获取用户的电子邮件并发送指向该电子邮件的链接,以允许用户更改其密码。该链接应该存储在另一个数据库表中,并且应该有某种与之关联的长唯一 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";
    

reset.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=''重置密码

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

【讨论】:

以上是关于忘记登录 - PHP 问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP忘记密码脚本[关闭]

wordpress登陆用户名忘记了,怎么查询,

php168,管理员密码忘记了怎么办?

Acunetix Web Vulnerability Scanner/AWVS忘记登录密码

易优cms做的网站,后台登录密码忘了怎么办?

为登录用户设计忘记密码