SQL-Injection (Datenbankangriff)
1. Was ist eine SQL-Injection?
SQL-Injection (SQLi) ist eine Hacking-Technik, bei der ein Angreifer bösartigen SQL-Code in eine Datenbankabfrage einschleust, um Daten zu stehlen, zu manipulieren oder zu löschen.
💡 Kurz gesagt:
Ein Angreifer nutzt unsichere Eingabefelder (z. B. Login-Formulare oder Suchleisten), um eine Datenbank direkt zu manipulieren.
2. Wie funktioniert eine SQL-Injection?
1️⃣ Ziel: Schwachstellen finden
- Der Angreifer testet, ob eine Webseite ungesicherte Datenbankabfragen verwendet.
- Meistens betrifft dies Formulare, URLs oder Suchfelder.
2️⃣ Schadcode einschleusen
- Statt einer normalen Eingabe gibt der Angreifer manipulierte SQL-Befehle ein.
- Beispiel für eine unsichere SQL-Abfrage:
SELECT * FROM users WHERE username = 'admin' AND password = '1234'; - Angreifer gibt
' OR '1'='1als Passwort ein:SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1'; - Da
1=1immer wahr ist, wird die Abfrage erfolgreich und der Angreifer bekommt Zugriff.
3️⃣ Folgen einer erfolgreichen SQL-Injection
✔ Datenbank auslesen (z. B. Passwörter, Kreditkartennummern)
✔ Datenbank manipulieren (z. B. Benutzerkonten ändern oder löschen)
✔ Administrativen Zugriff erhalten
✔ Schadcode in die Datenbank einschleusen
3. Arten von SQL-Injection
🔹 Klassische SQL-Injection
- Der Angreifer manipuliert direkte SQL-Abfragen, um Daten zu stehlen oder Login-Sperren zu umgehen.
🔹 Blind SQL-Injection
- Der Server gibt keine direkten Fehlermeldungen zurück.
- Der Angreifer stellt gezielte Ja-/Nein-Fragen an die Datenbank und analysiert die Reaktionszeit.
🔹 Zeitbasierte SQL-Injection
- Falls der Server keine sichtbaren Fehler ausgibt, kann der Angreifer SQL-Befehle nutzen, um Verzögerungen zu verursachen.
- Beispiel:
SELECT * FROM users WHERE username = 'admin' AND IF(1=1, SLEEP(5), false); - Falls der Server 5 Sekunden langsamer reagiert, weiß der Angreifer, dass die Bedingung funktioniert.
🔹 UNION-Based SQL-Injection
- Angreifer nutzt den
UNION-Befehl, um Daten aus anderen Tabellen abzurufen. - Beispiel:
SELECT username, password FROM users WHERE id=1 UNION SELECT credit_card, cvv FROM payments;
4. Beispiele für SQL-Injection
📌 Login-Bypass
- Eingabe im Login-Feld:
admin' -- - Das
--kommentiert den Rest der Abfrage aus, sodass das Passwort ignoriert wird. - Ergebnis: Angreifer kann sich ohne Passwort einloggen.
📌 Datenbank-Dump
- Ein Angreifer möchte alle Benutzernamen und Passwörter auslesen:
' UNION SELECT username, password FROM users; -- - Ergebnis: Die Webseite gibt eine Liste aller Nutzer samt Passwörtern aus.
📌 Datenbank-Löschen
- Falls die Anwendung keine Sicherheitsvorkehrungen hat, könnte der Angreifer die gesamte Datenbank löschen:
'; DROP TABLE users; -- - Folge: Alle Benutzerdaten werden gelöscht.
5. Wie kann man sich vor SQL-Injection schützen?
✅ 1. Prepared Statements & Parameterized Queries verwenden
- Keine direkten SQL-Abfragen mit Nutzereingaben!
- Beispiel mit sicherem Prepared Statement in PHP:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $password]); - Hier werden Platzhalter (
?) genutzt, um SQL-Code-Injection zu verhindern.
✅ 2. Eingaben validieren & escapen
- Nur erlaubte Zeichen akzeptieren (z. B. keine
',",;,--in Eingaben).
✅ 3. Mindestens die Rechte für Datenbanknutzer beschränken
- Der Webserver sollte nur Lese- und Schreibrechte haben, aber keine DELETE- oder DROP-Rechte.
✅ 4. Web Application Firewall (WAF) nutzen
- Schutzlösungen wie Cloudflare oder ModSecurity erkennen und blockieren SQL-Injection-Versuche.
✅ 5. Fehler nicht direkt anzeigen
- Falls eine SQL-Abfrage fehlschlägt, sollte die Webseite keine detaillierten Fehlermeldungen ausgeben.
- Besser: Eine generische Fehlermeldung anzeigen und SQL-Fehler intern loggen.
✅ 6. Zwei-Faktor-Authentifizierung (2FA) aktivieren
- Falls Angreifer trotzdem Zugangsdaten stehlen, erschwert 2FA den Zugriff erheblich.
6. Fazit
SQL-Injections sind gefährlich und einfach durchführbar, wenn Webseiten unsichere Datenbankabfragen nutzen. Durch sichere Programmierung, vorbereitete SQL-Abfragen und Zugriffsbeschränkungen kann man sich effektiv dagegen schützen. 🚀🔒
Wir sind darum bemüht die angebotenen Informationen aktuell zu halten und diese in knapper und verständlicher Form darzustellen. Fehler und Irrtümer bleiben aber menschlich und darum vorbehalten. Bei Unstimmigkeiten zu einem Begriff, bitten wir darum dies per E-Mail mit uns zu diskutieren. Bitte nutze hierfür unsere E-Mail: info@jupiterexpress.de« Zurück zum Glossar Index