0
我想驗證我的存儲哈希密碼與用戶輸入插入。在哈希驗證錯誤在PHP
說什麼理論......
約password_hash機制讀取後password_verify,我意識到,在理論上,所插入的字符串會被用哈希相比,至少在我的情況下,存儲在站點數據庫中。
發生了什麼事,我...
註冊我的用戶password_hash,然後驗證我用password_verify登錄。如果我很好,代碼是正確的,這個函數應該用存儲的散列驗證用戶的輸入(即使它是純文本(?))。
讓我們來看看代碼:
註冊代碼:
$passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));
注:有更多的代碼,但我想這是最重要的一部分,所以我決定只這部分粘貼。
登錄代碼:
<?php
//controller!
require "../model/backend.php";
$username = $_POST['user'];
$password = $_POST['password'];
$dbcom = new dbInteraction;
$dbcom->admlog($username, $password);
$dbcom->conclose();
?>
驗證碼:
$this->username = $username;
$this->password = $password;
//$this->pdo = $pdo;
//$adm = 1;
$myquery = 'SELECT username, password, isadmin FROM users WHERE username = :username';// AND password = :password';
$stmt = $this->pdo->prepare($myquery);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false){
die('1Incorrect username/password combination!');
} else{
//Compare the passwords.
$dbpass = $user['password'];
echo $dbpass;
echo '<br>bd<br>input<br>';
echo $password;
$validPassword = password_verify($dbpass, $password);
echo '<br>debug <br>';
echo 'pre pass:<br>';
echo $validPassword;
if($validPassword){
//Provide the user with a login session.
$_SESSION['user_id'] = $user['username'];
$_SESSION['logged_in'] = time();
//header('Location: home.php');
exit;
}else{
die('<br>no pass--Incorrect username/password combination!');
}
}
我必須在我的代碼中的一些理論基礎問題,或者它只是壞編碼?我仍然在努力實現。
非常感謝。
主要問題,我用你的代碼看到的是你的params用於在'password_verify'似乎是圍繞着錯誤的方式。接下來,它應該是一個純文本密碼,你傳遞給第一個參數(就像你期望的用戶輸入一樣),作爲背後的場景,將散列密碼與第二個參數進行比較。 –
我不能相信我把這些參數放在周圍...閱讀我閱讀的內容...謝謝@JonStirling。順便說一句,它足夠安全嗎?謝謝。 –
密碼API是否足夠安全?是的,目前。我建議查看其他密碼API函數,特別是[password_needs_rehash](http://php.net/manual/en/function.password-needs-rehash.php)並使用「PASSWORD_DEFAULT」。同時使用這兩個參數意味着如果PHP添加更安全的算法,您的哈希可以自動更新以供您存儲。 –