ホームページ  >  記事  >  データベース  >  PHP で会員専用ページのログイン システムを安全に実装するにはどうすればよいですか?

PHP で会員専用ページのログイン システムを安全に実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-23 13:21:12847ブラウズ

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: ログイン システムを使用したメンバー専用ページのセキュリティ保護

提供されたコードの課題

提供された PHP コードでは、その動作を妨げるいくつかの問題が発生しました。機能:

  1. クエリの取得結果: $data1 = $conn->query($sql1); を使用する代わりに、正しいアプローチは $data = mysqli_fetch_array($conn->query($sql1)); を使用することです。または $data = $conn->query($sql1)->fetch_array();
  2. データベース接続と実行: データベースへの接続は $total = $data = 0; を使用して確立する必要があります。
  3. MySQLi 構文: トークンを挿入するクエリでは、テーブル名と列名をバックティック () で囲む必要があります (INSERT INTO トークン (tk, gauth) VALUES (?,?) )`) 一重引用符の代わりに。
  4. ユーザー認証: 認証ロジックは、ブール値に依存するのではなく、クエリの結果を返す必要があります ($result = $conn->query($sql3)->fetch_array();)。
  5. トークン生成: 既存のトークン生成方法は、使用されているため安全ではありません。 openssl_random_pseudo_bytes()。代わりに、コードでは、random_bytes() のような暗号的に安全な乱数生成器 (CSPRNG) を使用する必要があります。

提案されたソリューション

  1. データベース操作の簡素化:単一のクエリを使用してユーザー情報を取得し、確認します。 credentials.
  2. プリペアド ステートメントを使用する: SQL インジェクションの脆弱性を防ぐためにパラメータをバインドします。
  3. トークンを安全に生成する:random_bytes() または同様の関数を使用します。安全なトークン生成のため。
  4. ストアセッション内の認証データ: Cookie の代わりにセッション変数に認証トークンを保存します。
  5. トークンの検証: トークン テーブルに対してデータベース クエリを実行して、提供されたトークンを検証します。

改善されたコード

次の改訂されたコードは、特定された問題に対処していますより安全な会員専用ページのログイン システムを提供します:

<?php
    session_start();
    error_reporting(0);

    $servername = "localhost";
    $username = "root20";
    $password = "jjewett38";
    $db = "vws";

    // Create connection
    $total = $data = 0;
    $conn = new mysqli($servername, $username, $password, $db);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Prepare statement for user authentication
    $sql_auth = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
    $sql_auth->execute();
    $result_auth = $sql_auth->get_result();

    // Authenticate user
    if ($result_auth->num_rows > 0) {
        $user = $result_auth->fetch_assoc();
        $correct = TRUE;
    } else {
        $correct = FALSE;
    }

    // Generate token
    if ($correct === TRUE) {
        $hex = bin2hex(random_bytes(3));
        $_SESSION['auth'] = $hex;
        $_SESSION['logstat'] = TRUE;
    }

    // Close connection
    $conn->close();
?>

以上がPHP で会員専用ページのログイン システムを安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。