03 — SQL-Injection

1

Was ist SQL-Injection?

Wenn der Programmierer den Login so baut:

schlechter Code
SELECT * FROM users
WHERE name = '$user' AND pw = '$pass'

...und der Hacker gibt als Name ' OR 1=1 -- ein, wird daraus:

SELECT * FROM users
WHERE name = '' OR 1=1 --' AND pw = '...'

1=1 ist immer wahr → Datenbank gibt den ersten User zurück (oft den Admin). Login geknackt, ohne Passwort.

2

🎮 Hack den Login

Probier den Login mit normalem Namen (geht nicht), und dann mit ' OR 1=1 -- als Name.

⚠ Unsicherer Login
3

Was der Hacker dann sieht

Mit dem Tool sqlmap dumpt er die ganze Datenbank in 30 Sekunden:
sqlmap -u "shop.de/login" \
  --data="user=*&pass=x" \
  --dump
→ Alle User, alle Passwörter (auch gehasht knackbar), alle Bestellungen, alle Karten.
4

🔍 Scanne deine echte Seite

Wir senden harmlose SQL- und XSS-Probes an Formulare auf deiner Domain.

🔍 Live-Scan: SQL-Injection & XSS

Sendet harmlose SQL-/XSS-Probes an gefundene Formulare. ⚠ aktive Tests, nur eigene Domain.

5

✅ Wie schützt du dich?

Mit Prepared Statements – die DB versteht User-Eingabe als Wert, nicht als Code:

sicherer Code
db.query(
  "SELECT * FROM users WHERE name=$1 AND pw=$2",
  [user, pass]  // <-- als Parameter
);
Moderne Backends (z.B. Supabase, Prisma, Drizzle) nutzen automatisch Prepared Statements. SQL-Injection ist dort praktisch unmöglich, solange du keinen rohen SQL-String mit User-Input bastelst.
Test: Tippe in dein Such-Feld auf deiner Seite ' OR 1=1 --. Kommen alle Produkte oder ein DB-Fehler? → Lücke.