SQL Injection mischt nicht vertrauenswürdige Eingaben in einen Datenbankbefehl, sodass die Datenbank Daten preisgeben, ändern oder zerstören kann.
Die Wirkung trifft die Datensätze, die die Anwendung erreichen kann, oft weit über das eine Konto hinaus, das der Besuch sehen sollte.
So funktioniert es
Wenn die Anwendung einen Befehl baut, indem sie Text mit Besuchereingaben verbindet, kann diese Eingabe die Bedeutung des Befehls ändern.
Folgen können Zeilen anderer Kunden, veränderte Salden oder gelöschte Datensätze sein.
Parametrisierte Abfragen senden Befehlsstruktur und Werte getrennt, damit die Datenbank die Eingabe als Daten behandelt.
Ein Anwendungskonto mit nur den nötigen Rechten begrenzt, wie weit ein Fehler reicht.
Konkrete Beispiele
- Ein Suchfeld liefert Zeilen, die einem anderen Kunden gehören.
- Eine Profiländerung schreibt Datensätze um, die der angemeldeten Person nicht gehören.
- Eine öffentliche Fehlermeldung zeigt, dass die Datenbank einen aus Besuchereingaben gebauten Befehl abgelehnt hat.
Schutzmaßnahmen
- Nutzen Sie parametrisierte Abfragen oder eine andere Schnittstelle, die Werte vom Befehlstext trennt.
- Geben Sie dem Datenbankkonto der Anwendung nur die Rechte, die die Funktion braucht.
- Prüfen Sie Geschäftsregeln wie Wertebereiche, verlassen Sie sich aber nicht auf Wortfilter als einzige Abwehr.
- Protokollieren Sie Datenbankfehler für Administrierende, ohne Besucherinnen und Besuchern Befehlsdetails zu zeigen.
