0Pricing
Cyber Security Academy · Lektion

Schutz vor SQL-Injection

Verhindern Sie Injection-Angriffe

Schutz vor SQL-Injection ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cyber Security Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist SQL-Injection

SQL-Injection (SQLi) tritt auf, wenn nicht vertrauenswürdige Benutzereingaben direkt an eine SQL-Abfrage angehängt werden. Der Angreifer schleust SQL-Syntax in ein Feld ein, das die Anwendung als reine Daten erwartet, und ändert dadurch die Bedeutung der Abfrage.

SQL-Injection gehört weiterhin zu den folgenreichsten Web-Schwachstellen, weil dadurch ganze Datenbanken offengelegt, Anmeldungen umgangen oder Daten zerstört werden können.

Eine anfällige Abfrage

Der klassische Fehler ist die Verkettung von Zeichenfolgen. Bei der Eingabe tom ist die Abfrage korrekt, aber eine speziell präparierte Eingabe schreibt die Logik um.

  • Das einfache Anführungszeichen schließt die Zeichenfolge vorzeitig.
  • Alles danach wird als ausführbares SQL interpretiert.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'

Umgehung der Authentifizierung

Anmeldeformulare sind ein bevorzugtes Ziel. Indem ein Angreifer eine immer wahre Bedingung einschleust und den Rest auskommentiert, kann er sich ohne Passwort anmelden.

Die Sequenz -- kommentiert die verbleibende Klausel aus, sodass die Passwortprüfung ignoriert wird.

-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'

Parametrisierte Abfragen

Die wichtigste Abwehrmaßnahme sind parametrisierte Abfragen (vorbereitete Anweisungen). Die SQL-Struktur wird getrennt von den Daten übermittelt, sodass Eingaben immer als Werte und niemals als Code behandelt werden.

Der Datenbanktreiber bindet Platzhalter wie ? sicher an die bereitgestellten Werte.

-- Python (sqlite3 / psycopg)
cur.execute(
  'SELECT * FROM users WHERE name = ? AND pass = ?',
  (username, password)
)

Vorbereitete Anweisungen in Java

Jede gängige Programmiersprache unterstützt Parametrisierung. Verwenden Sie in Java PreparedStatement, statt Zeichenfolgen mit Statement zu erstellen.

Gebundene Parameter können nicht aus ihrem Platz ausbrechen, daher ist SQL-Injection hier strukturell unmöglich.

PreparedStatement ps = conn.prepareStatement(
  "SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();

Gespeicherte Prozeduren

Gespeicherte Prozeduren können hilfreich sein, wenn sie intern parametrisierte Eingaben verwenden. Seien Sie jedoch vorsichtig: Eine gespeicherte Prozedur, die dynamisches SQL durch Verkettung erstellt, ist genauso anfällig.

  • Sicher: an die Prozedur übergebene Parameter.
  • Unsicher: EXEC() verketteter Zeichenfolgen innerhalb der Prozedur.

Eingabevalidierung und Allowlists

Validierung ist eine nützliche zweite Schutzschicht. Verwenden Sie Allowlists (akzeptieren Sie nur bekannte, zulässige Muster) statt Blocklists (versuchen Sie, schädliche Zeichen zu verbieten).

Ein numerisches ID-Feld sollte beispielsweise alles ablehnen, was nicht ausschließlich aus Ziffern besteht, bevor die Eingabe überhaupt die Abfrage erreicht.

if not user_id.isdigit():
    raise ValueError('invalid id')
# only then use the value

Escaping nur als letzter Ausweg

Das manuelle Maskieren von Anführungszeichen ist fehleranfällig und schwierig zuverlässig umzusetzen. Verschiedene Datenbanken haben unterschiedliche Regeln für das Escaping, und Sonderfälle wie Kodierungstricks oder Injection-Angriffe zweiter Ordnung können durchrutschen.

Bevorzugen Sie parametrisierte Abfragen. Verwenden Sie Escaping nur, wenn ein ORM oder Treiber einen bestimmten Bezeichner nicht parametrisieren kann.

Geringste Rechte für Datenbankkonten

Begrenzen Sie den Schaden einer erfolgreichen Injection, indem Sie das Prinzip der geringsten Rechte auf den Datenbankbenutzer der Anwendung anwenden.

  • Gewähren Sie auf den benötigten Tabellen nur SELECT, INSERT und UPDATE.
  • Verwenden Sie für die Anwendung niemals ein Superuser- oder root-Konto.
  • Verweigern Sie DROP, FILE und Administratorrechte.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';

ORMs und Abfrage-Builder

Moderne ORMs (Hibernate, Sequelize, Django ORM, SQLAlchemy) parametrisieren standardmäßig, wodurch das meiste SQL-Injection-Risiko entfällt.

Die Gefahr kehrt zurück, wenn Entwickler auf rohes SQL ausweichen oder in einem Abfrage-Builder Zeichenfolgeninterpolation verwenden. Übergeben Sie Werte auch im Raw-Modus immer als gebundene Parameter.

Mehrschichtige Abwehr

Keine einzelne Maßnahme reicht aus. Kombinieren Sie mehrere Schutzschichten:

  • Parametrisierte Abfragen überall (primäre Maßnahme).
  • Eingabevalidierung und Allowlists.
  • Datenbankkonten mit geringsten Rechten.
  • Eine Web Application Firewall (WAF), die bekannte Muster erkennt.
  • Fehlerbehandlung, die niemals SQL oder Stacktraces offenlegt.

Kurze Überprüfung

Testen Sie Ihr Verständnis der wichtigsten Abwehrmaßnahme.

Zusammenfassung

Sie haben gelernt, wie SQL-Injection funktioniert und wie sie verhindert wird:

  • SQLi entsteht, wenn nicht vertrauenswürdige Eingaben an Abfragen angehängt werden.
  • Parametrisierte Abfragen sind die wichtigste Abwehrmaßnahme.
  • Ergänzen Sie die Absicherung durch Allowlist-Validierung, Datenbankkonten mit geringsten Rechten und eine WAF.
  • Vermeiden Sie manuelles Escaping und dynamisches SQL in gespeicherten Prozeduren.

Eine mehrschichtige Abwehr verhindert, dass ein einzelner Fehler zu einem Sicherheitsvorfall wird.

Häufig gestellte Fragen

Ist die Lektion „Schutz vor SQL-Injection“ kostenlos?

Ja — der vollständige Text von „Schutz vor SQL-Injection“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cyber Security Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Schutz vor SQL-Injection“?

Verhindern Sie Injection-Angriffe Du übst Cyber Security Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cyber Security Academy zu starten?

Keine Vorkenntnisse erforderlich. Cyber Security Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Schutz vor SQL-Injection“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cyber Security Academy-Lektion Code schreiben und ausführen?

Ja. Jede Cyber Security Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Schutz vor SQL-Injection
  2. Zugriffskontrolle und Verschlüsselung
  3. Auditierung und Monitoring
  4. Sicherheit von Backups und Wiederherstellung
← Zurück zu Cyber Security Academy