SQL-Lab – Eingaben und Abfragen
In diesem Lab wird eine Suche in einer Datenbank simuliert. Die Anwendung übernimmt eine Eingabe direkt in eine SQL-Abfrage. Dadurch kann sich die Bedeutung der Abfrage verändern.
Im Mittelpunkt steht die Frage, was passiert, wenn Eingaben nicht nur als Wert behandelt werden, sondern in die Struktur einer Abfrage eingreifen.
Datensätze
Die Tabelle stellt eine vereinfachte Datenbank dar. Ein Teil der Informationen ist zunächst ausgeblendet.
Lehrkraft-Ansicht
Nicht angemeldet. Sensible Felder bleiben verborgen.
| ID | Username | Klasse | Durchschnitt | Kommentar |
|---|
Suche nach einem Datensatz
Die Anwendung erstellt aus der Eingabe diese Abfrage:
SELECT * FROM students WHERE username = 'EINGABE';
Wird ein Name eingetragen, sucht die Abfrage nach genau diesem Wert.
SELECT * FROM students WHERE username = 'alice';
Wenn die Eingabe die Abfrage verändert
In diesem Beispiel wird eine Eingabe verwendet, die nicht nur einen Wert enthält, sondern die Bedingung der Abfrage erweitert.
SELECT * FROM students WHERE username = '...';
Was passiert in der WHERE-Bedingung?
Normale Variante
SELECT * FROM students WHERE username = 'alice';
Die Bedingung prĂĽft, ob der Wert in der Spalte username genau zu alice passt.
Veränderte Variante
SELECT * FROM students WHERE username = '' OR '1'='1' --';
Der Ausdruck '1'='1' ist immer wahr. Dadurch trifft die Bedingung auf alle Datensätze zu.
Die Anwendung ĂĽbernimmt den Text direkt in die Abfrage. Dadurch wird aus einem Suchwert ein Teil der Abfragestruktur.
Gleiche Eingabe, andere Verarbeitung
In einer sicheren Variante wird die Eingabe nicht direkt in den SQL-Text eingebaut. Stattdessen bleibt sie ein Wert, der getrennt an die Abfrage ĂĽbergeben wird.
Unsicher
SELECT * FROM students WHERE username = 'EINGABE';
Die Eingabe verändert den SQL-Text selbst.
Sicher
SELECT * FROM students WHERE username = ? -- bind: ['EINGABE']
Die Struktur der Abfrage bleibt gleich. Nur der Wert wird eingesetzt.
SELECT * FROM students WHERE username = ? -- bind: ['...']
Zusammenfassung
- Eine normale Suche verarbeitet einen eingegebenen Wert.
- Eine unsichere Suche ĂĽbernimmt die Eingabe direkt in den SQL-Text.
- Dadurch kann sich die Logik der Abfrage ändern.
- Parameterbindung trennt Wert und Abfragestruktur.