medienkompetenz-lernplattform/backend/lessons/configs/sql-injection-shop.yaml
Marius Rometsch a439873394 Add lessons
2026-02-08 19:47:21 +01:00

130 lines
5.0 KiB
YAML

lessonKey: "sql-injection-shop"
title: "SQL Injection Angriff - Online Shop Demo"
description: "Lernen Sie, wie SQL Injection-Schwachstellen funktionieren, anhand eines realistischen Online-Shop-Szenarios"
difficultyLevel: "intermediate"
estimatedDuration: 20
module: "sql-injection-shop"
steps:
- id: "intro"
type: "content"
title: "Was ist SQL Injection?"
content: |
SQL Injection ist eine der gefährlichsten Schwachstellen in Webanwendungen. Sie tritt auf, wenn ein Angreifer bösartigen SQL-Code in eine Abfrage einfügen kann, wodurch er folgendes tun kann:
• Auf nicht autorisierte Daten zugreifen
• Datenbankeinträge ändern oder löschen
• Authentifizierung umgehen
• Administrative Operationen ausführen
In dieser Lektion werden Sie einen verwundbaren Online-Shop erkunden, um zu verstehen, wie SQL Injection funktioniert und warum korrekte Eingabevalidierung entscheidend ist.
- id: "shop-demo"
type: "interactive"
title: "Verwundbarer Online-Shop"
interactiveComponent: "SQLShopDemo"
content: |
Unten sehen Sie einen vereinfachten Online-Shop mit einer Produktsuchfunktion. Die Suchfunktion ist anfällig für SQL Injection.
Versuchen Sie zunächst, nach normalen Produkten zu suchen, und experimentieren Sie dann mit SQL Injection-Techniken.
- id: "question-1"
type: "question"
questionType: "multiple_choice"
question: "Welche der folgenden Sucheingaben könnten verwendet werden, um SQL Injection auszunutzen?"
options:
- id: "normal-search"
text: "laptop"
isCorrect: false
points: 0
- id: "single-quote"
text: "' OR '1'='1"
isCorrect: true
points: 15
- id: "union-select"
text: "' UNION SELECT username, password FROM users--"
isCorrect: true
points: 15
- id: "drop-table"
text: "'; DROP TABLE products--"
isCorrect: true
points: 10
maxPoints: 40
feedback:
correct: "Richtig! Diese Eingaben manipulieren die SQL-Abfragestruktur."
incorrect: "Überprüfen Sie die Demo. SQL Injection-Exploits verwenden Sonderzeichen wie Anführungszeichen und SQL-Schlüsselwörter."
- id: "detection"
type: "content"
title: "Wie SQL Injection funktioniert"
content: |
Eine verwundbare Abfrage könnte so aussehen:
SELECT * FROM products WHERE name LIKE '%[USER_INPUT]%'
Wenn ein Benutzer nach "laptop" sucht, wird die Abfrage zu:
SELECT * FROM products WHERE name LIKE '%laptop%'
Wenn er aber "' OR '1'='1" eingibt, wird sie zu:
SELECT * FROM products WHERE name LIKE '%' OR '1'='1%'
Die Bedingung OR '1'='1' ist immer wahr, also werden ALLE Produkte zurückgegeben!
Gefährlichere Angriffe können Daten aus anderen Tabellen extrahieren oder sogar Daten löschen.
- id: "question-2"
type: "question"
questionType: "single_choice"
question: "Was ist der BESTE Weg, um SQL Injection-Schwachstellen zu verhindern?"
options:
- id: "input-filtering"
text: "Gefährliche Zeichen wie Anführungszeichen und Semikolons herausfiltern"
isCorrect: false
points: 0
- id: "parameterized-queries"
text: "Parametrisierte Abfragen (Prepared Statements) verwenden"
isCorrect: true
points: 30
- id: "stored-procedures"
text: "Nur gespeicherte Prozeduren für den Datenbankzugriff verwenden"
isCorrect: false
points: 0
- id: "input-length"
text: "Die Länge von Benutzereingaben begrenzen"
isCorrect: false
points: 0
maxPoints: 30
feedback:
correct: "Ausgezeichnet! Parametrisierte Abfragen trennen SQL-Code von Benutzerdaten und machen Injection unmöglich."
incorrect: "Während Filterung hilft, sind parametrisierte Abfragen der Goldstandard. Sie stellen sicher, dass Benutzereingaben immer als Daten behandelt werden, niemals als SQL-Code."
- id: "mitigation"
type: "content"
title: "SQL Injection verhindern"
content: |
Best Practices zur Verhinderung von SQL Injection:
1. **Parametrisierte Abfragen** (Am wichtigsten)
• Prepared Statements mit gebundenen Parametern verwenden
• Niemals Benutzereingaben in SQL-Strings konkatenieren
2. **Eingabevalidierung**
• Datentypen validieren (Zahlen, E-Mails, etc.)
• Allowlists für erwartete Werte verwenden
3. **Minimale Berechtigungen**
• Datenbankkonten sollten minimale Berechtigungen haben
• Nur-Lese-Konten für Leseoperationen
4. **Web Application Firewalls**
• Können SQL Injection-Versuche erkennen und blockieren
• Sollten als zusätzliche Ebene verwendet werden, nicht als primäre Verteidigung
5. **Regelmäßige Sicherheitsaudits**
• Code-Reviews und Penetrationstests
• Automatisiertes Schwachstellen-Scanning
scoring:
passingScore: 90
maxTotalPoints: 180 # 70 from questions + up to 110 from 3 simplified challenges (30+40+80) with time bonuses