2016-09-14 7 views
-1

Это первый раз, когда я использую встроенные функции PHP в моем приложении. Я сохранил пароль пользователя, используя следующий код:password_verify() или сравнение хэшированного пользовательского ввода с сохраненным паролем в PHP?

password_hash($this->input->post('password'),PASSWORD_BCRYPT); 

И результат сохраняется в базе данных. Теперь я хочу проверить пользователя в процессе входа в систему.

Мой вопрос здесь. У меня есть 2 варианта:

Метод 1

$sql = "SELECT id,password FROM tbl_members WHERE email = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]')); 
if ($result->num_rows()) { 
    $row = $result->row(); 
    $hash = $row->password; 
    if (password_verify($this->input->post('password'), $hash)) echo 'Successful login'; 
} 

Метод 2

$hash = password_hash($this->input->post('password'),PASSWORD_BCRYPT); 
$sql = "SELECT id FROM tbl_members WHERE email = ? AND password = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]',$user_hashed_password)); 
if ($result->num_rows()) echo 'Successful Login'; 

Какой метод является более подходящим для процесса входа в систему?

+0

Один из них уязвим для временных атак, а другой нет. API предоставляется по какой-либо причине. Используй это. – PeeHaa

+1

@PeeHaa На самом деле ... один * работает *, а другой нет ... – deceze

+0

password_hash более обеспечен для меня, – Beginner

ответ

-1

Первый способ - лучший, и он как следует использовать. Шифрование, соль и т. Д. Хранятся в хэш-строке, поэтому, если вы меняете свое шифрование, старые сохраненные хэши по-прежнему действительны, и больше вам не нужно хранить соль и алгоритм, просто хэш.

 Смежные вопросы

  • Нет связанных вопросов^_^