Я пытаюсь написать простой логин на пару дней. После того, как я подумал, что у меня это работает, я понял, что он примет любой ввод в поле пароля как истинный, поэтому я его оставил и снова начал. Я пытаюсь использовать функцию 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;
}
}
Вы $password
получаете $_POST['password'];
Вы имеете hash
$password
$_POST['password'];
password_verify($_POST['password'], $hash)
Вы сравниваете $_POST['password']
с hash
. hash
также $_POST['password']
.
Вот почему они возвращаются всегда true.because $passwod
, hash
$_POST['password']
- это то же самое.
Причина, по которой он всегда возвращает 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!';
}
}
Вы присваиваете $hash
паролю, который вы получили через POST.
Так работает password_verify
boolean password_verify ( string $password, string $hash )
Проверяет, что данный $hash
соответствует полученному паролю.
Итак, теперь вы проверяете пароль, хранящийся в $hash
с паролем, полученным в POST, которые являются одинаковыми.
Следовательно, всегда верно.
Вы проверяете пароль после пароля. Вместо этого вы должны проверить почтовый пароль с требуемым паролем.