PHP password_verify не работает с подготовленным оператором - PullRequest
0 голосов
/ 11 мая 2018

Я начал использовать подготовленные операторы mysqli. Все работало правильно. Я написал в Code Review, чтобы узнать, были ли какие-либо непредвиденные ошибки или проблемы с безопасностью. Найдено здесь:

https://codereview.stackexchange.com/questions/194163/php-login-script

Я обновил свой код в соответствии с инструкциями, однако столкнулся с проблемой password_verify. Вот код:

<?php
include('../include/sessions.php');

if(isset($_POST['username']))
{
  $select = "SELECT username, firstname, lastname, email, userlevel, `password` FROM users WHERE username = ?;";
  $stmt = $dbc->prepare($select);

  $stmt->bind_param("s", $_POST['username']);
  $stmt->execute();
  $result = $stmt->get_result();
  $row = $result->fetch_assoc();

  if($row && password_verify($row['password'], $_POST['password']))
  {
    $_SESSION['user'] = $row;

    header("Location: ../cust/home.php");
    die;
  }
  else
  {
    echo "The username/password combination does not match our records.  Please try again.";
  }
}
?>

Подготовленный выше оператор выполняется соответственно. Я могу вернуть имя пользователя, имя, фамилию и т. Д. Но пароль не совпадает, даже если я правильно его ввожу.

Пароль базы данных был хэширован с помощью bcrypt. Я не уверен, играет ли это роль в этой ошибке.

Поскольку пароль не может быть проверен, он, конечно, переходит к другому и повторяет, что пароль неверный.

Кто-нибудь видит проблему?

1 Ответ

0 голосов
/ 11 мая 2018

Сначала должен прийти пароль в открытом виде, а затем хешированный пароль из базы данных, в соответствии с описанием функции bool password_verify ( string $password , string $hash )

password_verify($_POST['password'], $row['password']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...