[英]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.