Heim >Datenbank >MySQL-Tutorial >Wie können parametrisierte Abfragen in PHP mit MySQL vor SQL-Injection-Angriffen schützen?

Wie können parametrisierte Abfragen in PHP mit MySQL vor SQL-Injection-Angriffen schützen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 19:03:02626Durchsuche

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

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!

Stellungnahme:
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