我的登录脚本无法验证散列密码

时间:2017-04-22 12:36:47

标签: php html sql pdo

我正在为我的博客创建一个登录屏幕但是当它检查你在输入字段中设置的密码是否与数据库中的哈希密码相同时,他说我的密码是错误的#n&# 39;吨

我现在用Google搜索了很长时间并询问了几位同学,但它仍然无法正常工作。

<form id="loginForm" method="post" action="?page=blogInput">
            <br><h1>LOGIN</h1>

            <input type="text" placeholder="username" name="username" id="username" maxlength="24"><br>
            <input type="password" placeholder="password" name="password" id="password" minlength="8"
                   maxlength="16"><br>
            <input type="submit" value="login" id="submit">
        </form>
  <?php
include_once('resources/db.php');

$username = $_POST['username'];
$password = $_POST['password'];

$query = $dbh->prepare("SELECT username FROM users WHERE username=:username");
$query->execute(array(':username' => $username,));
$saved_password = $query->fetch(PDO::FETCH_ASSOC)['password'];

if (isset($username, $password)){
    if (password_verify($password, $saved_password)){
        if ($query->rowCount() == 1){
            echo "<script language='javascript' type='text/javascript'> location.href='register.php' </script>";
        }
        else{
            echo "<script type=\"text/javascript\">alert('Wrong username!')</script>";
        }
    }else{
        echo "<script type=\"text/javascript\">alert('Wrong password or username!')</script>";
    }

}else{
    echo "<script type=\"text/javascript\">alert('You need to fill in all fields')</script>";
}

?> 

知道编辑为最后建议的评论。

1 个答案:

答案 0 :(得分:1)

您的代码检查$password两次。首先在查询中检查密码是否匹配。然后,它检查密码的哈希是否匹配相同的值

只需从数据库查询中删除and password=废话,然后按照注释中的说明完成参数输入的更正。你应该没事。

......我刚注意到......

SELECT username FROM ...

您没有从数据库中选择密码(哈希)!

SELECT `password` FROM ...