Verwenden von Parametern in der SQL-LIKE-Anweisung
Beim Erstellen einer Suchfunktion ist es unbedingt erforderlich, Parameter zum Schutz vor SQL-Injection-Bedrohungen zu verwenden. Die Verwendung von Parametern in einer LIKE-Anweisung kann jedoch zu Herausforderungen führen, wie die folgende Abfrage zeigt:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Diese Abfrage ist anfällig für SQL-Injection, da die Parameter nicht ordnungsgemäß bereinigt werden. Um dieses Problem zu beheben, müssen die Parameter ordnungsgemäß definiert und mit einem Wert wie folgt zugewiesen werden:
Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchString +"%")
In diesem Beispiel wird der Parameter @query mit dem Wert von searchString definiert. Dadurch wird sichergestellt, dass die Eingabe des Benutzers, searchString, ordnungsgemäß bereinigt wird und die Abfrage vor SQL-Injection geschützt ist.
Außerdem ist zu beachten, dass die Abfrage Ergebnisse zurückgibt, wenn sie direkt in SQL Server ausgeführt wird:
SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE '%max%')
Das liegt daran, dass die Abfrage ohne Parameter ausgeführt wird und die LIKE-Anweisung die Zeichenfolge %max% direkt mit dem Inhalt der Haupt- und Titelspalten vergleicht. Wenn die LIKE-Anweisung jedoch mit Parametern ausgeführt wird, vergleicht sie den Parameterwert @query mit den Inhalten der Spalten, die ordnungsgemäß bereinigt werden, was dazu führt, dass keine Übereinstimmungen zurückgegeben werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Parameter mit SQL-LIKE-Anweisungen sicher verwenden, um SQL-Injection zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!