SQL-Injection mit parametrisierten Abfragen verhindern: Der Fragezeichen-Ansatz
Parametrierte Abfragen, die in SQL durch das Fragezeichen (?) gekennzeichnet sind, sind ein entscheidender Schutz gegen SQL-Injection-Schwachstellen. Diese Abfragen sind wichtig, wenn SQL-Anweisungen dynamisch innerhalb eines Programms erstellt und ausgeführt werden.
Der Hauptvorteil parametrisierter Abfragen gegenüber manuell erstellten Abfragen liegt in der erhöhten Sicherheit. Die Datenbankbibliothek übernimmt das Einfügen von Parametern und wendet automatisch die erforderlichen Escape-Mechanismen an, um das Einschleusen von Schadcode zu verhindern. Betrachten Sie dieses verwundbare Beispiel:
<code class="language-sql">string s = getStudentName(); cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"; cmd.Execute();</code>
Wenn ein Benutzer Folgendes eingibt: Robert'); DROP TABLE students; --
Die resultierende Abfrage wird anfällig für Angriffe.
Die Lösung besteht darin, parametrisierte Abfragen zu verwenden:
<code class="language-sql">s = getStudentName(); cmd.CommandText = "SELECT * FROM students WHERE name = ?"; cmd.Parameters.Add(s); cmd.Execute();</code>
Die Bibliothek bereinigt nun die Eingabe und macht den Schadcode unschädlich: Die Abfrage wird effektiv zu "SELECT * FROM students WHERE name = 'Robert''); DROP TABLE students; --'"
– der injizierte Code wird als wörtlicher Text behandelt.
Während das Fragezeichen ein weit verbreiteter Platzhalter ist, verwenden andere Datenbanksysteme, wie z. B. MS SQL Server, benannte Parameter (z. B. @varname
) für eine bessere Lesbarkeit:
<code class="language-sql">cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"; cmd.Parameters.AddWithValue("@varname", 7); result = cmd.Execute();</code>
Dieser Ansatz bietet die gleichen Sicherheitsvorteile bei klarerer Parameteridentifizierung.
Das obige ist der detaillierte Inhalt vonWie verhindern parametrisierte Abfragen mit Fragezeichen SQL-Injection-Angriffe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!