Was ist SQL-Injection?
Angriff, der ausnutzt, dass eine Webanwendung SQL-Anweisungen durch einfaches Anfügen von Nutzereingaben zusammensetzt, um mit der Eingabe die Bedeutung des Befehls zu ändern und die Datenbank unbefugt zu manipulieren. Prepared Statements mit Platzhaltern sind die grundlegende Gegenmaßnahme.
Japanische Bezeichnung: SQLインジェクション
„SQL-Injection“ kommt in 3 Übungsfragen aus 1 Themen vor, z. B. Grundlagen der Informationssicherheit.
Fachgebiet: Grundlagen der Informationssicherheit
Wie der Angriff funktioniert
Setzt eine Anwendung eine SQL-Anweisung zusammen, indem sie Zeichenketten wie „… WHERE name = '“, den Eingabewert und „'“ aneinanderhängt, schließt ein Anführungszeichen in der Eingabe die Zeichenkette, und alles Folgende wird als SQL-Befehl interpretiert. Mit der aus Lehrbüchern bekannten Eingabe ' OR '1'='1 wird die stets wahre Bedingung „oder '1' ist gleich '1'“ angehängt, sodass die Authentifizierung umgangen werden kann. Auch das Auslesen, Verändern oder Löschen von Daten kann die Folge sein.
Häufige Fragen
Lässt sich SQL-Injection durch Escaping verhindern?
Escaping kann sie in manchen Fällen verhindern, doch dafür müssen sämtliche Regeln jedes Datenbanktyps und jeder Zeichenkodierung lückenlos behandelt werden, und schon eine einzige Lücke lässt den Angriff gelingen. Grundlegende Gegenmaßnahme sind daher Prepared Statements mit Platzhaltern.
Lässt sich SQL-Injection durch eine Begrenzung der Eingabelänge verhindern?
Nein. Schon kurze Zeichenketten können die Bedeutung eines Befehls ändern. Begrenzungen der Länge oder der zulässigen Zeichen sind ergänzende Maßnahmen; die grundlegende Gegenmaßnahme sind Prepared Statements.