0
我有使用PDO我的網站login.php
文件。對於基於用戶輸入的所有其他查詢,我一直使用預準備語句來防止sql注入。但是,對於登錄部分,我使用password_verify()
將輸入的密碼與數據庫中的散列值進行比較。我真的不能用事先準備好的聲明這是我的代碼看起來是這樣的:PDO password_verify,我需要消毒嗎?
if($res->fetchColumn() == 1){
$stmt2 = $conn->prepare("SELECT `password` FROM members WHERE :email = `email`");
$stmt2->bindParam(':email', $email);
$res2 = $stmt2->execute();
$passhash = $res2->fetchColumn();
$password_verify($_POST[password], $passhash);
//^^ do i need to sanitize that?
}else{
//login failed
}
這似乎是它會是一個簡單的答案,但我只是想確保我這樣做是正確。
你必須確保當你第一次保存,如果你做任何事情,通過消毒或過濾的方式密碼哈希到你的數據庫中,當你檢查它時你也一樣。如果你沒有對它進行消毒,那麼你在驗證時不會對它進行消毒。您沒有將其顯示到頁面或將其存儲在原始數據庫中,因此它應該沒問題。 – Rasclatt
也不是'$ password_verify'和'$'。可能只是一個錯字... – Rasclatt
謝謝!沒有清理原始密碼,但在散列/存儲時使用了準備好的語句。 – BradyM