Reparaturlösung für SQL-Injection-Sicherheitslücken, die durch die direkte Verwendung von ${} in dynamischen Tabellennamen oder der dynamischen Sortierung von MyBatis verursacht werden

MyBatis kann #{}so oft wie möglich verwendet werden #{}. Dieser Artikel löst hauptsächlich ${ }das Problem, wie ${}die dadurch verursachte SQL-Injection-Sicherheitslücke behoben werden kann, wenn es verwendet werden muss.

Sicherheitsrisikoanalyse

Die Hauptursache für SQL-Injection-Schwachstellen besteht darin, dass ein Angreifer den Kontext einer SQL-Abfrage ändern kann, wodurch Werte, die Programmierer ursprünglich als Daten interpretieren wollten, als Befehle interpretiert werden. Nach dem Erstellen einer SQL-Abfrage weiß der Programmierer, welche Zeichen als Befehle und welche als Daten interpretiert werden sollen. Parametrisierte SQL-Anweisungen verhindern eine direkte Manipulation des Kontexts und vermeiden fast alle SQL-Injection-Angriffe. Parametrisierte SQL-Anweisungen werden mithilfe regulärer SQL-Zeichenfolgen erstellt. Wenn jedoch vom Benutzer bereitgestellte Daten hinzugefügt werden müssen, müssen gebündelte Parameter verwendet werden, die Platzhalter für später eingefügte Daten sind. Mit anderen Worten ermöglichen gebündelte Parameter dem Programmierer, der Datenbank explizit mitzuteilen, welche Zeichen als Befehle und welche als Daten behandelt werden sollen. Wenn sich das Programm auf die Ausführung einer Anweisung vorbereitet, kann es auf diese Weise die Laufzeitwerte angeben, die für jeden gebündelten Parameter in der Datenbank verwendet werden sollen, ohne dass das Risiko besteht, dass die Daten als Befehl manipuliert werden.

Gefährliche Codebeispiele

  1. Dynamischer Abfragecode für Tabellennamen

Wählen Sie * aus ${tablename} aus

  1. Code dynamisch löschen

aus ${tablename} löschen

  1. Dynamische Feldsortierung

Wählen Sie * aus xxx Reihenfolge nach ${fieldName} aus

  1. Tabelle löschen

t fallen lassen

Guess you like

Origin blog.csdn.net/eguid_1/article/details/131826859