130 lines
5.0 KiB
YAML
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
|