Heim >Datenbank >MySQL-Tutorial >Wie verhindern parametrisierte Abfragen in SQL SQL-Injection-Angriffe?

Wie verhindern parametrisierte Abfragen in SQL SQL-Injection-Angriffe?

Barbara Streisand
Barbara StreisandOriginal
2025-01-09 21:32:45258Durchsuche

How Do Parameterized Queries in SQL Prevent SQL Injection Attacks?

SQL-parametrisierte Abfrage mit Fragezeichen

Wenn Sie die SQL-Dokumentation konsultieren, stoßen Sie möglicherweise auf Fragezeichen (?) in Abfragen. Diese Platzhalter stellen parametrisierte Abfragen dar und werden häufig zur Ausführung von dynamischem SQL in Programmen verwendet.

Parametrierte Abfragen haben viele Vorteile. Sie vereinfachen den Code, indem sie Parameterwerte von der Abfrage selbst entkoppeln und ihn so effizienter und flexibler machen. Darüber hinaus erhöhen sie die Sicherheit, indem sie SQL-Injection-Angriffe verhindern.

Zum Beispiel in einem Pseudocode-Beispiel:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()</code>

kann umgeschrieben werden als:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()</code>

Diese Technik gewährleistet ein ordnungsgemäßes String-Escape und eliminiert das Risiko einer SQL-Injection. Stellen Sie sich das folgende Szenario vor:

<code>string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()</code>

Wenn der Benutzer die Zeichenfolge Robert'); DROP TABLE Students -- eingibt, kann es zu einem SQL-Injection-Angriff kommen. Allerdings mit parametrisierten Abfragen:

<code>s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()</code>

Die Bibliotheksfunktion bereinigt die Eingabe, um die Ausführung von Schadcode zu verhindern.

Alternativ verwendet Microsoft SQL Server benannte Parameter, was die Lesbarkeit und Übersichtlichkeit verbessert:

<code>cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()</code>

Das obige ist der detaillierte Inhalt vonWie verhindern parametrisierte Abfragen in SQL SQL-Injection-Angriffe?. 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