Bagaimana untuk Melaksanakan Sistem Log Masuk Halaman Ahli Sahaja dengan Selamat dalam PHP?

Barbara Streisand
Lepaskan: 2024-11-23 13:21:12
asal
833 orang telah melayarinya

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

PHP: Selamat Halaman Ahli Sahaja dengan Sistem Log Masuk

Cabaran dengan Kod Yang Diberikan

Kod PHP yang disediakan menghadapi beberapa isu yang menghalangnya fungsi:

  1. Pendapatan Pertanyaan Keputusan: Daripada menggunakan $data1 = $conn->query($sql1);, pendekatan yang betul ialah menggunakan $data = mysqli_fetch_array($conn->query($sql1)); atau $data = $conn->query($sql1)->fetch_array(); untuk mengambil hasil pertanyaan.
  2. Sambungan dan Pelaksanaan Pangkalan Data: Sambungan ke pangkalan data hendaklah diwujudkan menggunakan $total = $data = 0; sebelum melaksanakan sebarang pertanyaan.
  3. Sintaks MySQL: Pertanyaan untuk memasukkan token hendaklah menggunakan tanda belakang () di sekeliling nama jadual dan lajur (INSERT INTO token (tk, gauth) NILAI (?,? )`) bukannya petikan tunggal.
  4. Pengguna Pengesahan: Logik pengesahan harus mengembalikan hasil pertanyaan dan bukannya bergantung pada nilai boolean ($result = $conn->query($sql3)->fetch_array();).
  5. Penjanaan Token: Kaedah penjanaan token sedia ada tidak selamat kerana ia menggunakan openssl_random_pseudo_bait(). Sebaliknya, kod tersebut hendaklah menggunakan penjana nombor rawak selamat secara kriptografi (CSPRNG) seperti random_bytes().

Cadangan Penyelesaian

  1. Permudahkan Operasi Pangkalan Data: Gunakan satu pertanyaan untuk mendapatkan semula maklumat pengguna dan semak kelayakan.
  2. Gunakan Penyata Disediakan: Ikat parameter untuk mengelakkan kerentanan suntikan SQL.
  3. Jana Token Dengan Selamat: Gunakan random_bytes() atau fungsi serupa untuk penjanaan token selamat.
  4. Simpan Data Pengesahan dalam Sesi: Simpan pengesahan token dalam pembolehubah sesi dan bukannya kuki.
  5. Sahkan Token: Lakukan pertanyaan pangkalan data terhadap jadual token untuk mengesahkan token yang disediakan.

Kod yang Diperbaiki

Kod yang disemak berikut menangani isu yang dikenal pasti dan menyediakan log masuk halaman ahli sahaja yang lebih selamat sistem:

<?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();
?>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Sistem Log Masuk Halaman Ahli Sahaja dengan Selamat dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan