Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie MySQLI :: STMT_INIT, um einen sicheren Anmeldeprüfungsmechanismus zu implementieren

Verwenden Sie MySQLI :: STMT_INIT, um einen sicheren Anmeldeprüfungsmechanismus zu implementieren

M66 2025-06-06

Bei der Entwicklung von PHP -Websites ist die Benutzeranmeldungsfunktion fast ein wesentlicher Bestandteil davon. Wenn die Benutzereingabe jedoch versehentlich verarbeitet wird, ist es anfällig für SQL -Injektionsangriffe. MySQLI :: STMT_INIT ist eine Methode, die durch die MySQLI -Erweiterung bereitgestellt wird, die effektiv durch SQL -Injektion mit Vorverarbeitungsanweisungen verhindert werden kann. In diesem Artikel wird ein bestimmtes Beispiel verwendet, um zu beschreiben, wie Sie einen sicheren Mechanismus zur Anmeldeauthentifizierung implementieren können.

Warum die SQL -Injektion verhindern?

Die SQL -Injektion ist eine Angriffstechnologie, bei der ein Angreifer mit der ursprünglichen Abfragelogik durch die Injektion böswilliger SQL -Anweisungen in das Eingabefeld tampiert. Zum Beispiel, wenn Sie SQL direkt spleißen:

 $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

Ein Angreifer kann 'oder' 1 '=' 1 als Benutzername oder Passwort eingeben, so dass die Abfrage immer wahr ist und die Authentifizierung umgeht.

Die Rolle von MySQLI :: STMT_INIT- und Vorverarbeitungsaussagen

MySQLI :: STMT_INIT wird verwendet, um ein MySQLI_STMT -Objekt zu initialisieren. Es ist der erste Schritt bei der Implementierung von Vorverarbeitungsanweisungen. Es kann SQL strikt von der Benutzereingabe unterscheiden, wodurch Injektionsangriffe effektiv verhindert werden.

Beispielcode: Sicherheitsanmeldeüberprüfung

Hier ist ein Beispiel für eine sichere Anmeldeformularüberprüfung:

 <?php
// Datenbankverbindung
$mysqli = new mysqli("localhost", "db_user", "db_password", "my_database");

// Überprüfen Sie die Verbindung
if ($mysqli->connect_errno) {
    die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}

// Benutzername und Passwort für Benutzereinstellungen
$username = $_POST['username'];
$password = $_POST['password'];

// Initialisieren Sie ein Vorverarbeitungsobjekt
$stmt = $mysqli->stmt_init();

// schreiben SQL Abfrageanweisung,verwenden ? Platzhalter
$sql = "SELECT id, password_hash FROM users WHERE username = ?";

// Vorbereitungserklärung
if ($stmt->prepare($sql)) {
    // Binden Sie Parameter(s äußern string Typ)
    $stmt->bind_param("s", $username);

    // Ausführungsanweisung
    $stmt->execute();

    // Ergebnisse erhalten
    $stmt->bind_result($user_id, $password_hash);

    // Stellen Sie fest, ob es ein Ergebnis gibt
    if ($stmt->fetch()) {
        // Passwort überprüfen(Angenommen, die Datenbank ist gespeichert password_hash() Ergebnisse)
        if (password_verify($password, $password_hash)) {
            echo "Erfolgreich anmelden,Willkommen Benutzer ID:$user_id";
            // Richten Sie eine Sitzung ein oder springen,Zum Beispiel:
            // header("Location: https://m66.net/dashboard.php");
        } else {
            echo "Fehlerkennwort";
        }
    } else {
        echo "Der Benutzername existiert nicht";
    }

    // Aussage
    $stmt->close();
} else {
    echo "SQL Erklärung Vorbereitung ist fehlgeschlagen: " . $mysqli->error;
}

// Schließen Sie die Verbindung
$mysqli->close();
?>

Zusammenfassung

Durch die Verwendung von BIND_PARAM mit MySQLI :: STMT_INIT mit Vorverarbeitungsanweisungen können wir SQL -Injektionsangriffe effektiv verhindern. Vorverarbeitungsanweisungen sollten immer in der Entwicklung verwendet werden, um Benutzereingaben zu verarbeiten, insbesondere wenn Datenbankvorgänge beteiligt sind. Darüber hinaus sollten Funktionen wie Password_hash () und Passage_verify () verwendet werden, um die Passwortsicherheit zu verbessern.

Wenn Sie ein Login -System oder ein Benutzerauthentifizierungsmodul erstellen, verwenden Sie zuerst diese Methode, was viel sicherer ist als herkömmliches String -Spleißen.