无法使用password_verify函数

时间:2016-10-19 10:47:28

标签: php mysqli

我在用户登录我的应用程序时验证密码时遇到一些问题 - 这是一项正在进行中的工作,我完全清楚安全性是不完整的,可以攻击但是没有发布我我正在测试。

我使用:password_hash($password, PASSWORD_DEFAULT);

对密码进行了哈希处理

我现在想要验证这一点,但我的脚本似乎失败了,我知道在哪里但是我不知道我需要更改什么才能进行验证,因为我已经从程序更改为OOP。

$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);


$query = "SELECT * FROM users WHERE (email = '". $email ."') AND password = '". $password ."'" ;
$result = $con->query($query);

if ($result->num_rows === 1) {
    $row = $result->fetch_array(MYSQLI_ASSOC);
    if (password_verify($password, $row['password'])) {

            $_SESSION['email'] = $email;
            $_SESSION['id'] = $id;
                $row = mysqli_fetch_assoc($result);
            $_SESSION['email'] = $row['email'];
            $_SESSION['id'] = $row['id'];

            header('Location: ../dashboard/index');

            }else{
                header('Location: ../index.php?message=Email address or password is incorrect');
            }

}

我知道脚本在验证发生的if语句中失败,因为它为登录脚本文件提供了一个空白页面(上图)。我只是回答'hi'进行测试,这是会话代码,这似乎是问题所在。

1 个答案:

答案 0 :(得分:1)

更改这两行,它应该有效。

$password = mysqli_real_escape_string($con, $_POST['password']);
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE (email = '". $email ."') AND password = '". $password ."'" ;
$query = "SELECT * FROM users WHERE (email = '". $email ."')" ;

您将无法从通过帖子提交的密码中选择密码,因为存储的密码已经过哈希处理。

每个电子邮件只能在表格中包含一个条目,但是如果需要,可以检查返回的行数是否等于1。

相关问题