私は自分のウェブサイトのログインシステムを作成していますが、それほど大したことはありません。私は$pw = password_hash($pw, PASSWORD_BCRYPT, array('cost' => 14));
のようなパスワードをハッシュしています。私はログインシートのパスワードを確認するためにpassword_verifyを使用しなければならないと言われましたが、もう一度チェックしますが、私は何をしなければならないのか分かりません。誰かが何をしなければならないかを一歩一歩説明してもらえますか?PHPログインシステム
GLOBAL $username;
GLOBAL $pw;
if (empty($_POST["username"])) {
echo"fill in username to sign in";
} else {
if (empty($_POST["pw"])) {
echo"fill in password to sign in";
} else {
//check if form is submitted
if (isset($_POST['signin'])) {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$pw = mysqli_real_escape_string($conn, $_POST['pw']);
$valid = password_validate($password, $hash);
$sql = mysqli_query($conn, "SELECT * FROM users WHERE username = '" . $username. "' and pw = '" . $pw. "'");
if ($row = mysqli_fetch_array($sql)) {
// if insert checked as successful echo username and password saved successfully
echo "successfully logged in";
} else {
$errormsg = "Incorrect username or Password!!!";
}
}
}
}
に従うことをする関数は 'password_verify()'、 'ないpassword_validate()'です。それに、あなたは$ hashをどこから得るのですか?変数を '$ pw'として定義していますが、' $ password'として使用しようとしています。 – Qirel
パスワードはあなたのハッシュである 'WHERE'を選択しません。password_hashは毎回新しいsaltを作成します。いいえ、データベースからハッシュを取得し、生のパスワード入力に対してそれをテストします。 –
ユーザー名とパスワードをエスケープすると、ユーザーが入力した値が変更される危険性があります。 USE準備されたパラメータ化されたクエリ – RiggsFolly