2016-09-14 5 views
-1

私のアプリケーションでPHP固有のパスワード機能を使用しているのは初めてです。以下のコードを使用してユーザーのパスワードを保存しました。password_verify()またはハッシュされたユーザー入力をPHPで保存されたパスワードと比較していますか?

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

結果はデー​​タベースに保存されます。今、私はログインプロセスでユーザーを確認したい。

私の質問はこちらです。

方法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'; 

:私は2つの選択肢がありますか?

+0

タイミング攻撃に対して脆弱性があります。 APIは、理由により提供されています。これを使って。 – PeeHaa

+1

@PeeHaa実際には... *動作していて、もう1つは動作しません... – deceze

+0

password_hashは私のためにより安全です。 – Beginner

答えて

-1

最初の方法が最適です。使用する必要があります。暗号化や塩分などはハッシュ文字列に格納されているので、暗号化を変更しても古いハッシュは有効です。さらに、ハッシュ値だけではなく、塩分やアルゴリズムを保存する必要はありません。

関連する問題