Я уже пару дней пытаюсь написать простой логин. После того, как я подумал, что он работает, я понял, что он примет любой ввод в поле пароля как истинный, поэтому я удалил его и начал снова. Я пытаюсь использовать функцию php password_verify
для проверки, но независимо от того, что я делаю, она всегда возвращает истину. Я что-то не так делаю? Вот мой код (я знаю, что он небезопасен, я просто хочу, чтобы он сейчас распознал неправильный пароль)
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']
,
Вот почему они всегда возвращают истину. Потому что $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, которые совпадают.
Следовательно всегда верно.