Heim >Datenbank >MySQL-Tutorial >Wie verhindern vorbereitete Anweisungen die SQL-Injection?
Vorbereitete Anweisungen: Eine robuste Verteidigung gegen SQL-Injection (Teil 2)
Vorbereitete Anweisungen bieten einen proaktiven Ansatz zur Verhinderung von SQL-Injections. Dies erreichen sie, indem sie vom Benutzer bereitgestellte Daten von der SQL-Abfragestruktur trennen. Anstatt Benutzereingaben direkt in die Abfragezeichenfolge einzubetten, verwenden vorbereitete Anweisungen Parameter, die normalerweise als Fragezeichen (?) dargestellt werden, als Platzhalter.
Die Datenbank-Engine analysiert und kompiliert die vorbereitete Anweisung bevor die Benutzerdaten hinzugefügt werden. Dieser entscheidende Schritt stellt sicher, dass die Benutzereingaben ausschließlich als Daten behandelt werden und verhindert so, dass sie als ausführbarer SQL-Code interpretiert werden. Dies steht in krassem Gegensatz zu der anfälligen Methode, Benutzereingaben direkt in der SQL-Zeichenfolge zu verketten.
Anschauliches Beispiel: Erwägen Sie das Einfügen von Benutzerdaten in eine Datenbank.
Anfällige Zeichenfolgenverkettung:
<code class="language-java">PreparedStatement stmt = conn.createStatement("INSERT INTO students VALUES('" + user + "')"); stmt.execute();</code>
Sichere vorbereitete Erklärung:
<code class="language-java">PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES(?)"); stmt.setString(1, user); stmt.execute();</code>
Wenn ein böswilliger Benutzer Folgendes eingibt: Robert'); DROP TABLE students; --
Die Methode zur Zeichenfolgenverkettung führt zu:
<code class="language-sql">INSERT INTO students VALUES('Robert'); DROP TABLE students; --')</code>
Dadurch wird der bösartige DROP TABLE
Befehl ausgeführt.
Mit der vorbereiteten Anweisung führt die Datenbank jedoch Folgendes aus:
<code class="language-sql">INSERT INTO student VALUES('Robert');</code>
Die böswillige Eingabe wird als wörtliche Daten behandelt, wodurch die SQL-Injection-Bedrohung neutralisiert wird. Vorbereitete Anweisungen isolieren die Logik der Abfrage effektiv von potenziell schädlichen Benutzereingaben und garantieren so die Integrität des SQL-Befehls.
Das obige ist der detaillierte Inhalt vonWie verhindern vorbereitete Anweisungen die SQL-Injection?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!