Mir ist klar, dass parametrisierte SQL-Abfragen die optimale Methode sind, um Benutzereingaben zu bereinigen, wenn Abfragen erstellt werden, die Benutzereingaben enthalten. Ich frage mich jedoch, was falsch daran ist, Benutzereingaben zu übernehmen und einfache Anführungszeichen zu umgehen und die gesamte Zeichenfolge mit einfachen Anführungszeichen zu umgeben. Hier ist der Code:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
Jedes einfache Anführungszeichen, das der Benutzer eingibt, wird durch doppelte einfache Anführungszeichen ersetzt, wodurch die Möglichkeit des Benutzers, die Zeichenfolge zu beenden, entfällt. Alle anderen eingegebenen Zeichen wie Semikolons, Prozentzeichen usw. sind Teil der Zeichenfolge und nicht tatsächlich als Teil des Befehls ausgeführt.
Wir verwenden Microsoft SQL Server 2000, für das das einfache Anführungszeichen meines Erachtens das einzige Zeichenfolgenbegrenzer und die einzige Möglichkeit ist, dem Zeichenfolgenbegrenzer zu entkommen. Daher gibt es keine Möglichkeit, etwas auszuführen, das der Benutzer eingibt.
Ich sehe keine Möglichkeit, einen SQL-Injection-Angriff dagegen zu starten, aber mir ist klar, dass, wenn dies so kugelsicher wäre, wie es mir scheint, jemand anderes bereits daran gedacht hätte und es gängige Praxis wäre.
Was ist los mit diesem Code? Gibt es eine Möglichkeit, einen SQL-Injection-Angriff nach dieser Desinfektionstechnik durchzuführen? Eine Benutzereingabe, die diese Technik ausnutzt, wäre sehr hilfreich.
AKTUALISIEREN:
Ich kenne immer noch keine Möglichkeit, einen SQL-Injection-Angriff gegen diesen Code effektiv zu starten. Einige Leute schlugen vor, dass ein Backslash einem einfachen Anführungszeichen entgehen und das andere die Zeichenfolge beenden würde, damit der Rest der Zeichenfolge als Teil des SQL-Befehls ausgeführt wird, und mir ist klar, dass diese Methode funktionieren würde, um SQL einzufügen eine MySQL-Datenbank, aber in SQL Server 2000 ist die einzige Möglichkeit (die ich gefunden habe), einem einfachen Anführungszeichen zu entkommen, ein anderes einfaches Anführungszeichen; Backslashes machen das nicht.
Und wenn es keine Möglichkeit gibt, das Entkommen des einfachen Anführungszeichens zu stoppen, wird keine der restlichen Benutzereingaben ausgeführt, da alle als eine zusammenhängende Zeichenfolge verwendet werden.
Ich verstehe, dass es bessere Möglichkeiten gibt, Eingaben zu bereinigen, aber ich bin wirklich mehr daran interessiert zu erfahren, warum die oben angegebene Methode nicht funktioniert. Wenn jemand einen bestimmten Weg kennt, um einen SQL-Injection-Angriff gegen diese Desinfektionsmethode durchzuführen, würde ich ihn gerne sehen.