Пароль проверять всегда возвращая истину

0

Я пытаюсь написать простой логин на пару дней. После того, как я подумал, что у меня это работает, я понял, что он примет любой ввод в поле пароля как истинный, поэтому я его оставил и снова начал. Я пытаюсь использовать функцию php password_verify для проверки, но независимо от того, что я делаю, она всегда возвращает true. Есть ли что-то, что я делаю неправильно? Вот мой код (я знаю, что он не защищен, я просто хочу, чтобы он распознал неправильный пароль на данный момент)

if(isset($_POST['submit']))
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    if(password_verify($_POST['password'], $hash))
    {
        echo 0;
    }
    else
    {
         echo 1;
    }
}
Теги:
encryption
mysqli
passwords
login

4 ответа

0
Лучший ответ

Вы $password получаете $_POST['password'];

Вы имеете hash $password $_POST['password'];

 password_verify($_POST['password'], $hash)

Вы сравниваете $_POST['password'] с hash. hash также $_POST['password'].

Вот почему они возвращаются всегда true.because $passwod, hash $_POST['password'] - это то же самое.

  • 0
    Спасибо, я понял это сейчас!
2

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

Когда вы используете функцию password_verify() параметр $hash должен прибывать из другого места (обычно это какая-то база данных).

// If this is a POST request then handle the form
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Get password from form
    $pass = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW);

    // Connect to a database of some kind
    // Get a previously hashed password
    $hash = 'A HASH FROM SOMEWHERE ELSE...';

    // Verify the previously hashed password
    // against the password provided by the user
    if (password_verify($pass, $hash)) {
        echo 'Password is valid!';
    }
}
0

Вы присваиваете $hash паролю, который вы получили через POST.

Так работает password_verify

boolean password_verify ( string $password, string $hash )

Проверяет, что данный $hash соответствует полученному паролю.

Итак, теперь вы проверяете пароль, хранящийся в $hash с паролем, полученным в POST, которые являются одинаковыми.

Следовательно, всегда верно.

0

Вы проверяете пароль после пароля. Вместо этого вы должны проверить почтовый пароль с требуемым паролем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню