Zum Inhalt springen

SQL-Injection

SQL-Injection entsteht, wenn fremde Daten die Struktur einer Datenbankabfrage verändern. Parameter binden Werte, aber keine Zugriffsrechte.

IT-Sicherheit

SQL-Injection bezeichnet das Einschleusen von SQL-Anweisungsbestandteilen über Daten, die eine Anwendung verarbeitet. Werden solche Werte in den Text einer Abfrage eingebaut, können sie deren Bedeutung verändern. Welche Daten gelesen oder verändert werden können, hängt unter anderem von den Rechten des verwendeten Datenbankkontos ab.

Projektfilter und Abfragestruktur trennen

Ein fiktives Ticketportal sucht Einträge zu einer Projektreferenz. Den Wert aus dem Feld projectRef behandelt es als gebundenen Abfrageparameter: Die Abfragestruktur steht fest, der Wert wird getrennt über die Datenbankschnittstelle übergeben. Er soll ein Suchwert bleiben und keinen Teil der SQL-Syntax bilden.

Das bloße nachträgliche Vorbereiten einer bereits aus Eingaben zusammengesetzten Abfrage schafft diese Trennung nicht. Auch früher gespeicherte Daten oder Werte aus anderen Systemen dürfen beim späteren Abfrageaufbau nicht ungeprüft zu SQL-Text werden.

Werte binden, Struktur fest vorgeben

Ein Sortierfeld wie sortKey ist ein anderer Fall. Platzhalter für Datenwerte ersetzen keine beliebigen Spaltennamen oder Sortierrichtungen. Die Anwendung ordnet bekannte Auswahlwerte deshalb festen, im Code vorgegebenen Spalten und Richtungen zu. OWASP beschreibt diese Trennung zwischen Parameterbindung und erlaubten Strukturentscheidungen ausdrücklich.

Parameterbindung prüft zudem nicht, ob die angemeldete Person auf das angefragte Projekt zugreifen darf. Diese Berechtigungsprüfung bleibt Aufgabe der Anwendung. Ein auf benötigte Rechte begrenztes Datenbankkonto kann mögliche Schäden begrenzen; es beseitigt die unsichere Abfragekonstruktion selbst nicht.

Quellen