CyberDefense Lab đź§Ş

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.

1 · Ausgangspunkt

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
2 · Normale Suche

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.

Abfrage
SELECT * FROM students WHERE username = 'alice';
3 · Veränderte Eingabe

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.

Zusammengesetzte Abfrage
SELECT * FROM students WHERE username = '...';
4 · Analyse

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.

Entscheidend ist nicht die Länge der Eingabe, sondern ihre Funktion.
Die Anwendung ĂĽbernimmt den Text direkt in die Abfrage. Dadurch wird aus einem Suchwert ein Teil der Abfragestruktur.
5 · Absicherung

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.

Sichere Abfrage
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.
ZurĂĽck zur Startseite