私はより安全なページを私にしようとしています。私はその一部を暗号化するパスワードを使い始めました。私はpassword_hash + password verifyを実装しようとしていますが、これまでのところ全部の作業を成功させるには失敗しました。だから、私のログインエリアにあります: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