[解決済み] PHP PDOログインシステムの不具合
2022-02-07 11:11:45
質問
ログインシステムを作っているのですが、どのようなパスワードのユーザーでも私のシステムに入ることができるようです。
mysqliを使用してこのシステムを作ることができますが、私はPDOで問題が発生しました。どのようにそれを解決すればよいのでしょうか。
if(isset($_POST["login-submit"])){
require "dbh.inc.php";
$username = $_POST["username"];
$user_password = $_POST["password"];
$user_password = password_hash($user_password, PASSWORD_DEFAULT);
$sql = "SELECT count(id) FROM users WHERE username = :username AND user_password = :user_password";
$stmt = $conn->prepare($sql);
$stmt->execute(["username" => $username, "user_password" => $user_password]);
if($stmt->rowCount() == 1){
session_start();
$_SESSION["username"] = $username;
header("location:../index.php?login=success");
exit();
} else {
header("location:../index.php?login=failed");
exit();
}
}
私はコードの他のすべての部分をテストしました、私が新しいユーザーを登録するとき、それらはうまくいくようです、しかし、私がログインフォームを使用する場合、そこに任意のパスワードで誰でも私のシステムに入ることができます。間違ったユーザーと間違ったパスワードを入力しても、常にログインに成功すると表示されます。 私はまた、これに似たスタックオーバーフローで他の質問を見たことがありますが、それらのコードはちょっと複雑です。
解決方法は?
パスワードの有効性を確認するために再度ハッシュ化を行っていますが、その代わりに
password_verify
のように、パスワードが正当なものであるかどうかをチェックします。
if(isset($_POST["login-submit"])){
require "dbh.inc.php";
$username = $_POST["username"];
$user_password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username = :username";
$stmt = $conn->prepare($sql);
$stmt->execute(["username" => $username]);
$user = $stmt->fetch();
$hash = $user['user_password'];
if(password_verify($user_password,$hash)){
session_start();
$_SESSION["username"] = $username;
header("location:../index.php?login=success");
exit();
} else {
header("location:../index.php?login=failed");
exit();
}
}
仮に、ユーザーのパスワードをデータベースに保存するために
password_hash
関数を使用します。
また、ユーザー名で取得した後、ハッシュを取得し、そのハッシュを検証するために
password_verify()
関数を使用します。
関連
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み] PDOのプリペアドステートメントは、SQLインジェクションを防ぐのに十分ですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]