Heim >Datenbank >MySQL-Tutorial >Wie verhindern vorbereitete Anweisungen die SQL-Injection?

Wie verhindern vorbereitete Anweisungen die SQL-Injection?

Susan Sarandon
Susan SarandonOriginal
2025-01-20 22:57:08392Durchsuche

How Do Prepared Statements Prevent 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!

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