2014-11-09 2 views
0

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

@FerozAkbar Он находится в [ядре PHP] (http://php.net/password_verify). –

+1

тот, который вы сравниваете, должен быть выбранным хэшированным паролем из строки db, которая была зарегистрирована в предыдущей операции. – Ghost

+1

Это ваш «полный» код? Я сомневаюсь, так как вы отметили это как 'mysqli'. Покажите нам, как вы его используете. У меня есть несколько готовых скриптов, которые используют обе функции. –

ответ

0

Вы $password получение $_POST['password'];

Вы hash$password который $_POST['password'];

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

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

Именно поэтому они всегда верны. Потому что $passwod, hash - $_POST['password'] - это то же самое.

+0

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

0

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

0

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

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

boolean password_verify (string $password , string $hash)

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

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

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

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!'; 
    } 
} 
Смежные вопросы