0 レビュー
1 回答
php-PDOプリペアドステートメントとパスワードハッシュ?
iveはこの問題を解決するためにインターネット全体を調べましたが、私の人生でそれを理解することはできません。本当にあきらめ始めています。
したがって、基本的に、正しい電子メールと正しいパスワードでログインすると、間違った電子メールまたはパスワードと表示されます。これは、データベースでパスワードをハッシュするたびに発生します
パスワード:testtest
ハッシュ:$ 2y $ 10 $ hk3d / GyYvImcxYR.vdC2 / .JDIeQeXyKdTSPifueAkQNrYVBcMn1Yi
とにかく誰かが私を助けてくれるなら、ここで驚くべきことは私のlogin.phpコードです。
<?php
require "../private/php/autoload.php";
$error = "";
if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_SESSION['token']) && isset($_POST['token']) && $_SESSION['token'] == $_POST['token']){
$email = $_POST['email'];
if(!preg_match("/^[\w\-][email protected][\w\-]+.[\w\-]+$/", $email)){
$error = "Please enter a valid email.";
}
$password = $_POST['password'];
if ($error == ""){
$arr['email'] = $email;
$arr['password'] = $password;
$query = "SELECT * FROM users WHERE email = :email && password = :password LIMIT 1";
$stm = $conn->prepare($query);
$check = $stm->execute($arr);
if($check){
$data = $stm->fetchAll(PDO::FETCH_OBJ);
if(is_array($data) && count($data) > 0){
$data = $data[0];
if (password_verify($_POST['password'], $data->password)){
$_SESSION['username'] = $data->username;
$_SESSION['user_id'] = $data->user_id;
header("Location: index.php");
die;
}
}
}
}
$error = "Wrong email or password!";
}
$_SESSION['token'] = get_random_string(30);
?>```
わからない
0
レビュー
答え :
解決:
MySQLテーブルにはハッシュされたパスワードが含まれていますが、ハッシュされていないパスワードを渡してクエリを実行しているため、現在一致していない/機能していません。
また、プレーンテキストのパスワードが送信されており、MySQLログに簡単に記録される可能性があるため、セキュリティの観点からこれは悪い可能性があることに注意してください(遅いログ、問題があった場合はエラーなど)。
クエリをスワップアウトして、電子メールアドレスのみを検索し(一意であると想定)、PHPロジックでパスワードハッシュがMySQLの結果と一致することを確認します。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。