„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 17.11.2024
Durchsuche:883

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: Anstelle von $data1 = $conn->query($sql1); ist der richtige Ansatz 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 Token-Generierungsmethode 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. Verwenden Sie vorbereitete Anweisungen: Binden Sie Parameter, um SQL-Injection-Schwachstellen zu verhindern.
  3. Tokens sicher generieren: Verwenden Sie random_bytes() oder eine ähnliche Funktion zur sicheren Token-Generierung.
  4. Authentifizierungsdaten in Sitzung speichern: Speichern Sie das Authentifizierungstoken in einer Sitzungsvariablen anstelle eines Cookies.
  5. Token validieren: Führen Sie eine Datenbankabfrage anhand der Tokentabelle durch, um das bereitgestellte Token zu validieren.

Verbesserter Code

Der folgende überarbeitete Code behebt die identifizierten Probleme und bietet ein sichereres Anmeldesystem nur für Mitglieder:

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();
?>
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3