Heim >Datenbank >MySQL-Tutorial >Wie können parametrisierte Abfragen in PHP mit MySQL vor SQL-Injection-Angriffen schützen?
Parametrierte Abfragen für sichere PHP-MySQL-Verbindungen
SQL-Injection stellt eine ernsthafte Sicherheitsbedrohung für Webanwendungen dar. Durch die Manipulation von SQL-Abfragen können sich Angreifer unbefugten Zugriff auf sensible Daten verschaffen oder den Datenbankbetrieb stören. Parametrisierte Abfragen stellen eine wirksame Gegenmaßnahme zur Minderung dieser Schwachstelle dar.
Hier ist ein Codeausschnitt von einer Anmeldeseite, der zeigt, wie eine parametrisierte Abfrage in PHP mit MySQL vorbereitet wird:
<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection $userName = $_POST["username"]; $userPass = $_POST["password"]; $stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?"); mysqli_stmt_bind_param($stmt, "s", $userName); mysqli_stmt_bind_param($stmt, "s", $userPass); mysqli_stmt_execute($stmt); $row = mysqli_stmt_fetch($stmt); if (!$row) { echo "No existing user or wrong password."; }</code>
Dieser Code stellt mit mysqli_connect eine Verbindung zur MySQL-Datenbank her und weist $dbc die Verbindungskennung zu. Die Variablen $userName und $userPass empfangen den Benutzernamen und das Passwort, die der Benutzer auf der Anmeldeseite eingegeben hat.
Die Funktion mysqli_prepare initialisiert eine vorbereitete Anweisung. Als erstes Argument wird die auszuführende SQL-Abfrage übergeben. In diesem Fall werden alle Zeilen aus der Benutzertabelle abgerufen, in denen sowohl der Benutzername als auch das Kennwort mit den Eingabeparametern übereinstimmen.
Als nächstes wird mysqli_stmt_bind_param verwendet, um die vom Benutzer bereitgestellten Eingabeparameter $userName und $userPass an zu binden die Platzhalter (?) in der vorbereiteten Anweisung. Der Code gibt an, dass beide Parameter vom Datentyp s (String) sind.
Die Funktion mysqli_stmt_execute führt die vorbereitete Anweisung aus.
Schließlich ruft mysqli_stmt_fetch die erste Zeile aus der Ergebnismenge ab und weist sie zu die $row-Variable.
Durch die Verwendung parametrisierter Abfragen stellt dieser Code sicher, dass bösartige SQL-Anweisungen nicht ausgeführt werden können, und schützt so vor SQL-Injection-Angriffen.
Für zusätzliche Sicherheit wird dringend empfohlen, zu verschlüsseln oder hashen Sie das Passwort des Benutzers, bevor Sie es in der Datenbank speichern.
Das obige ist der detaillierte Inhalt vonWie können parametrisierte Abfragen in PHP mit MySQL vor SQL-Injection-Angriffen schützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!