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!