Vorbereitete Anweisungen sind sehr nützlich, um die MySQL-Injection zu verhindern.
Vorbereitete Anweisungen werden verwendet, um mehrere identische SQL-Anweisungen effizienter auszuführen.
Vorbereitete Anweisungen funktionieren wie folgt:
Vorverarbeitung: SQL-Anweisungsvorlagen erstellen und an die Datenbank senden. Reservierte Werte werden mit dem Parameter „?“ gekennzeichnet. Zum Beispiel:
INSERT INTO MyGuests (Vorname, Nachname, E-Mail) VALUES(?, ?, ?)
Datenbankanalyse, Kompilierung, Abfrageoptimierung für SQL-Anweisungsvorlagen und Speicherung der Ergebnisse ohne Ausgabe.
Ausführung: Schließlich wird der anwendungsgebundene Wert an den Parameter („?“-Markierung) übergeben und die Datenbank führt die Anweisung aus. Die Anwendung kann die Anweisung mehrmals ausführen, wenn die Parameterwerte unterschiedlich sind.
Im Vergleich zur direkten Ausführung von SQL-Anweisungen haben vorbereitete Anweisungen zwei wesentliche Vorteile:
Vorbereitete Anweisungen reduzieren die Analysezeit erheblich, da nur eine Abfrage durchgeführt wird (obwohl die Anweisung mehrmals ausgeführt wird).
Durch das Binden von Parametern wird die Serverbandbreite reduziert. Sie müssen nur die Parameter der Abfrage und nicht die gesamte Anweisung senden.
Vorbereitete Anweisungen sind für die SQL-Injection sehr nützlich, da nach dem Senden von Parameterwerten unterschiedliche Protokolle verwendet werden, um die Gültigkeit der Daten sicherzustellen.
Das folgende Beispiel verwendet vorbereitete Anweisungen in MySQLi und bindet die entsprechenden Parameter:
Analysieren Sie jede Codezeile für das folgende Beispiel:
„INSERT INTO MyGuests (Vorname, Nachname, E-Mail) VALUES(?, ?, ?)“In SQL-Anweisungen verwenden wir ein Fragezeichen (?). Hier können wir das Fragezeichen durch eine Ganzzahl, eine Zeichenfolge, einen Gleitkommawert mit doppelter Genauigkeit und einen booleschen Wert ersetzen.
Schauen wir uns als Nächstes die Funktion bind_param() an:
$stmt->bind_param("sss", $firstname, $lastname, $email);Diese Funktion bindet SQL-Parameter und teilt der Datenbank den Wert der Parameter mit. Die Parameterspalte „sss“ verwaltet die Datentypen der übrigen Parameter. Das s-Zeichen teilt der Datenbank mit, dass es sich bei dem Parameter um eine Zeichenfolge handelt.
Es gibt vier Arten von Parametern:
i – Ganzzahl (Ganzzahltyp)
d – double (Gleitkommatyp mit doppelter Genauigkeit)
s - Zeichenfolge
b - BLOB (binäres großes Objekt: binäres großes Objekt)
Jeder Parameter erfordert einen angegebenen Typ.
Indem Sie der Datenbank den Datentyp des Parameters mitteilen, können Sie das Risiko einer SQL-Injection verringern.
Hinweis: Wenn Sie andere Daten (Benutzereingaben) einfügen möchten, ist die Validierung der Daten sehr wichtig. |
Im folgenden Beispiel verwenden wir vorbereitete Anweisungen und Bindungsparameter in PDO: