繁体   English   中英

将用户密码从哈希存储函数更改为明文

[英]change user password from hash store function to cleartext

我正在做一个关于如何制作 php mysql 登录表单的教程 现在教程已经做得很好了,我想稍微修改一下并更改登录密码以存储明文而不是散列。 哈希行如下所示:

$new_password = password_hash($upass, PASSWORD_DEFAULT);

我做了:

$new_password = $upass;

从它。 它现在将明文保存到数据库中,但登录不起作用。

登录部分看起来像这样,我没有看到我希望哈希密码被转换和匹配的部分......

public function doLogin($uname,$upass)
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT user_id, user_name, user_pass FROM users WHERE user_name=:uname");
            $stmt->execute(array(':uname'=>$uname));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
            if($stmt->rowCount() == 1)
            {
                if(password_verify($upass, $userRow['user_pass']))
                {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

线路:

if(password_verify($upass, $userRow['user_pass']))

根据给定的密码检查密码的哈希值。 当您删除散列函数时,它会将未散列的密码与明文密码进行比较。

将其更改为:

if($upass == $userRow['user_pass'])

那应该解决它。

虽然你真的不应该存储明文密码。

如果您不再对密码进行散列,则无法验证散列

if(password_verify($upass, $userRow['user_pass']))

应该

if($upass == $userRow['user_pass'])

明白这是一个非常糟糕的主意 您可能不明白为什么散列密码很重要

无论出于何种原因,您的数据库都可能遭到破坏,其数据可能会被其他人获取。 如果密码是我们所说的纯文本,您将泄露用户信任您的一条敏感信息:他们的密码(很可能是在多个服务中共享的密码)。 这是一个非常严重的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM