したがって、私はPHPで簡単なログインシステムをコーディングしています。PHPのpassword_verifyに問題があります
if ($hash == $hash2) {
$pass = password_hash($hash, PASSWORD_BCRYPT);
} else {
$message = "As password não são iguais.\\nTenta de novo.";
echo "<script type='text/javascript'>alert('$message');</script>";
echo "<script type='text/javascript'>window.location = '../registo.php';</script>";
echo "</script>";
}
$sql = "INSERT INTO user (hash) VALUES ('$pass')";
フォームログのために:ここ
は、登録コードはだ、私はクエリでデータベースの固定IDを使用しています簡単にするために(
<form class="form" id="formLogin" style="color:#ffffff" action="stuff/login.php" method="post">
password:
<input name="password" id="password" type="password" placeholder="" style="background-color: #ffffff; color:#111111;" ><br>
<br>
<button type="submit" name="submit" id="btnLogin" style="padding-top: 5%; padding-bottom: 5%; color:#ffffff" class="btn btn-default outline center-block">Login</button>
</form>
マイlogin.phpとパスワードフィールドのみ)
require_once("db.php");
require("password.php");
if (!empty($_POST['password'])) {
$pass = htmlspecialchars($_POST['password']);
$id = 1;
$sql = "SELECT * FROM user WHERE id ='$id'";
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($res);
$numRows = mysqli_num_rows($res);
$h = $row['hash'];
if($numRows == 1) {
if(password_verify($pass, $h)) {
header("Location: ../backoffice.php");
} else {
$message = $pass . " " . $h;
echo "<script type='text/javascript'>alert('$message');</script>";
echo "</script>";
}
} else {
$message = "a palavra-passe e/ou nome de utilizador est\343o errados.\\nTenta de novo.";
echo "<script type='text/javascript'>alert('$message');";
echo "window.location = '../index.php';";
echo "</script>";
}
};
私はpassword_verifyのelse部分に$メッセージをエコーしますay入力パスワードとデータベースハッシュの両方、彼らはokと思われます - ログインフォームから正しい文字列の結果、およびデータベースに格納されている正しいハッシュ。 しかし、それは動作しません。助言がありますか?
'$パス=はhtmlspecialchars($ _ POST [ 'パスワード']);'なぜ? –
@ MarkBakerは同じことを考えていましたが、代わりにfilter_input()を試してみてください。 –
何もパスワードを変更する必要はありません。どのような形式のフィルタリングや操作でも、実際にはパスワードのエントロピーが減少しています –