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
- Dynamischer Abfragecode für Tabellennamen
Wählen Sie * aus ${tablename} aus
- Code dynamisch löschen
aus ${tablename} löschen
- Dynamische Feldsortierung
Wählen Sie * aus xxx Reihenfolge nach ${fieldName} aus
- Tabelle löschen
t fallen lassen