我想讓我的頁面更安全,我開始使用它的密碼加密部分。我試圖實現password_hash +密碼驗證,但到目前爲止,我沒有成功完成整個工作。所以,這是在我的登錄區域:PHP password_verify不對數據庫工作
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = mysqli_real_escape_string($connection, $_POST['password']);
$query = "SELECT username, password FROM `users` WHERE username='$username' and user_enabled='1'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
if($row = mysqli_fetch_assoc($result)) { $dbpassword = $row['password']; }
if(password_verify($password, $dbpassword)) {
echo "Successful login";
}else{
echo "Invalid Login Credentials.";
}
我總是收到無效的登錄憑證。
當我修改該用戶的新密碼,我做了以下內容:在數據庫
$pass = mysqli_real_escape_string($connection, $_POST['password']);
$options = [ 'cost' => 10,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
$query = "UPDATE users
SET `password` = '".$password."'
WHERE id = ".$_POST['user_id']."
";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
密碼爲VARCHAR(255),它是存儲這樣的:
$2y$10$Y5HIyAsLMfkXIFSJONPsfO3Gxx3b46H.8/WFdLVH3Fqk2XNfy2Uaq
我在這裏做錯了什麼?
調試每一步的方法; 'var_dump($ password)'在哈希之後,在數據庫中檢查它,在將它從數據庫中拉出後檢查它。它在任何階段都完全改變......?對你想驗證的密碼做同樣的處理。 – deceze
並學習使用預準備語句和綁定參數,而不是使用SQL注入式字符串連接。 – deceze
我剛剛確認在更新數據庫之前創建的密碼與存儲在數據庫中的密碼相同,並且與登錄時從數據庫中拉出的密碼相同。 – cbarg