Heim > Datenbank > MySQL-Tutorial > Wie implementiert man ein Seiten-Login-System nur für Mitglieder sicher in PHP?

Wie implementiert man ein Seiten-Login-System nur für Mitglieder sicher in PHP?

Barbara Streisand
Freigeben: 2024-11-23 13:21:12
Original
869 Leute haben es durchsucht

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

PHP: Sichere Seiten nur für Mitglieder mit einem Login-System

Herausforderungen mit dem bereitgestellten Code

Der bereitgestellte PHP-Code stößt auf mehrere Probleme, die ihn behindern Funktionalität:

  1. Abruf von Abfrageergebnissen: Anstatt zu verwenden $data1 = $conn->query($sql1);, der richtige Ansatz ist die Verwendung von $data = mysqli_fetch_array($conn->query($sql1)); oder $data = $conn->query($sql1)->fetch_array(); um die Abfrageergebnisse abzurufen.
  2. Datenbankverbindung und -ausführung: Die Verbindung zur Datenbank sollte mit $total = $data = 0; bevor Sie Abfragen ausführen.
  3. MySQLi-Syntax: Die Abfrage zum Einfügen des Tokens sollte Backticks () um Tabellen- und Spaltennamen verwenden (INSERT INTO tokens (tk, gauth) VALUES (?,? )`) anstelle von einfachen Anführungszeichen.
  4. Benutzerauthentifizierung: Die Authentifizierungslogik sollte das Ergebnis der Abfrage zurückgeben, anstatt sich auf boolesche Werte zu verlassen ($result = $conn->query($sql3)->fetch_array();).
  5. Token-Generierung : Die vorhandene Methode zur Token-Generierung ist nicht sicher, da sie openssl_random_pseudo_bytes() verwendet. Stattdessen sollte der Code einen kryptografisch sicheren Zufallszahlengenerator (CSPRNG) wie random_bytes() verwenden.

Vorgeschlagene Lösung

  1. Datenbankoperationen vereinfachen: Verwenden Sie eine einzige Abfrage, um Benutzerinformationen abzurufen und Anmeldeinformationen zu überprüfen.
  2. Vorbereitet verwenden Anweisungen: Binden Sie Parameter, um SQL-Injection-Schwachstellen zu verhindern.
  3. Token sicher generieren: Verwenden Sie random_bytes() oder eine ähnliche Funktion für die sichere Token-Generierung.
  4. Authentifizierungsdaten in Sitzung speichern: Speichern Sie das Authentifizierungstoken in einer Sitzungsvariablen statt in einer Cookie.
  5. Token validieren: Führen Sie eine Datenbankabfrage anhand der Tokentabelle durch, um das bereitgestellte Token zu validieren.

Verbesserter Code

Das Folgende Der überarbeitete Code behebt die identifizierten Probleme und bietet ein sichereres Login-System nur für Mitglieder:

<?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();
?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie implementiert man ein Seiten-Login-System nur für Mitglieder sicher in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage