2016-07-16 67 views
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 
    } 

這似乎是它會是一個簡單的答案,但我只是想確保我這樣做是正確。

+0

你必須確保當你第一次保存,如果你做任何事情,通過消毒或過濾的方式密碼哈希到你的數據庫中,當你檢查它時你也一樣。如果你沒有對它進行消毒,那麼你在驗證時不會對它進行消毒。您沒有將其顯示到頁面或將其存儲在原始數據庫中,因此它應該沒問題。 – Rasclatt

+0

也不是'$ password_verify'和'$'。可能只是一個錯字... – Rasclatt

+0

謝謝!沒有清理原始密碼,但在散列/存儲時使用了準備好的語句。 – BradyM

回答

1

你不需要消毒它作爲你要它與哈希密碼從數據庫中比較

加上register.php你不需要消毒密碼爲你要它哈希使用password_hash() 然後將其保存到不會造成任何危害,因爲它已經散列

任何消毒就登錄密碼可能會破壞它 例如,如果用戶使用的密碼一樣mypassword'1'2' 數據庫3後消毒這將是 輸入mypassword \「1 \」 2 \'3這是不一樣的

希望它有助於