Wie man SQL-Injection verhindert

Die Durchsetzung des Zugriffs mit den geringsten Rechten, die Bereinigung von Benutzereingaben und die Einschränkung von Datenbankprozeduren können helfen, SQL-Injection und anschließende Datenschutzverletzungen zu verhindern.

Lernziele

Nach Lektüre dieses Artikels können Sie Folgendes:

  • Wie funktioniert SQL-Injection?
  • Best Practices zur Verhinderung von SQL-Injection überprüfen
  • Erfahren, wie Cloudflare hilft, SQLi-Angriffe zu verhindern

Ähnliche Inhalte


Möchten Sie noch mehr erfahren?

Abonnieren Sie theNET, Cloudflares monatliche Zusammenfassung der beliebtesten Einblicke in das Internet!

Lesen Sie die Cloudflare Datenschutzrichtlinie, um zu erfahren, wie wir Ihre persönlichen Daten sammeln und verarbeiten.

Link zum Artikel kopieren

Wie SQL-Injection-Angriffe funktionieren

Structured Query Language Injection (SQLi) ist ein Code-Injection-Angriff, der es Angreifern ermöglicht, sensible Informationen in SQL-Datenbanken abzurufen, zu manipulieren oder zu zerstören. Bei diesen Angriffen werden spezielle Befehle in SQL-Abfragefelder eingeschleust. Wenn diese Befehle ausgeführt werden, können Angreifer die Identität legitimer Nutzer vortäuschen, geschützte Daten einsehen oder abrufen und sogar Root-Zugriff auf Server erlangen.

Angreifer nutzen bei SQLi häufig Schwachstellen in Anwendungsprogrammierschnittstellen (Application Programming Interfaces, APIs) aus, die nicht in der Lage sind, ordnungsgemäß zwischen legitimem und unsicherem Code zu unterscheiden. Ohne die Möglichkeit, geänderte Befehle oder Abfragen zu erkennen, können diese APIs dazu verwendet werden, um böswillige Anfragen auszuführen, z. B. um Web Application Firewalls (WAF) oder Authentifizierungsmaßnahmen zu umgehen.

SQLi wird in der Regel nach einer von drei Methoden durchgeführt:

  1. In-Band-SQL-Injection startet und vollendet einen Angriff über einen einzigen Kommunikationskanal.Die häufigsten Arten von In-Band-SQLi sind error-based SQLi (wenn Angreifer Fehlermeldungen verwenden, um wichtige Informationen über die zugrunde liegende Datenbank zu identifizieren) und union-based SQLi (wenn Angreifer UNION-SQL-Operatoren verwenden, um Sicherheitslücken in der Datenbank aufzudecken). Dies ist die einfachste und am häufigsten vorkommende Form von SQLi.
  2. Bei der Out-of-Band-SQL-Injection hingegen kann der Angreifer nicht denselben Kommunikationskanal verwenden, um einen Angriff zu initiieren und abzuschließen. Stattdessen muss die kompromittierte Anwendung in der Lage sein, Daten an einen entfernten Endpunkt unter der Kontrolle des Angreifers zu schleusen, häufig über DNS- oder HTTP-Anfragen. Dies ist die schwierigste und am wenigsten verbreitete Form von SQLi.
  3. Inferential SQL-Injection, auch als blindes SQLi bezeichnet, erfordert, dass Angreifer böswillige Nutzlasten an den Zielserver senden, um herauszufinden, wie dieser ausgenutzt werden kann. In der Regel gibt es zwei Formen: Blind Boolean-based SQLi (wenn ein Angreifer einen Server mit Hilfe von Wahr-oder-Falsch-Abfragen dazu zwingt, unterschiedliche Antworten zu geben) oder Blind time-based SQLi (wenn ein Angreifer aus den unterschiedlichen Antwortzeiten des Servers dieselben Informationen ableiten kann). Dies dauert oft länger als In-Band-SQLi, kann aber ebenso großen Schaden anrichten.

Praktische Beispiele für harmlose und böswillige SQL-Abfragen finden Sie unter Was ist SQL-Injection?

Wie man SQL-Injection verhindert

SQL-Injection ist zwar eine der häufigsten API-Bedrohungen, kann aber mit den richtigen Präventionsstrategien wirksam verhindert werden. Hilfreiche Ansätze zur Prävention von SQL-Injection sind die Einschränkung von Datenbankprozeduren, die Bereinigung von Datenbankeingaben und die Durchsetzung des Zugriffs nach dem Least-Privilege-Prinzip.

Datenbankprozeduren und Code einschränken

SQL-Injection hängt weitgehend von der Fähigkeit eines Angreifers ab, Dateneingaben und Datenbankfunktionen zu manipulieren. Unternehmen können das Risiko nicht autorisierter oder böswilliger Abfragen verringern, indem sie diese Eingaben einschränken und die Art der möglichen Datenbankprozeduren begrenzen. Dies kann durch folgende Maßnahmen erreicht werden:

  • Erzwingung von vordefinierten Anweisungen und parametrisierten Abfragen: Vordefinierte Anweisungen definieren zulässigen SQL-Code und spezifizieren bestimmte Parameter für eingehende Abfragen. Böswillige SQL-Anweisungen werden als ungültige Dateneingaben und nicht als ausführbare Befehle betrachtet.
  • Verwendung gespeicherter Prozeduren: Ähnlich wie vordefinierte Anweisungen sind gespeicherte Prozeduren vordefinierte und wiederverwendbare SQL-Anweisungen, die aus einer Datenbank abgerufen werden können – und verhindern, dass böswillige Parteien Code direkt in der Datenbank selbst ausführen.

Validieren und Bereinigen von Datenbankeingaben

Benutzereingaben in eine SQL-Datenbank sollten regelmäßig überwacht, validiert und bereinigt werden, um Schadcode zu entfernen. Die Validierung von Eingaben stellt sicher, dass die Daten ordnungsgemäß überprüft und nach vordefinierten Kriterien formatiert werden, während die Bereinigung von Eingaben die Eingaben verändert (oder „bereinigt“), indem ungültige oder unsichere Zeichen entfernt und die Eingaben bei Bedarf neu formatiert werden. Die Validierung von Eingaben kann auf verschiedene Weise erfolgen:

  • Erstellung einer Genehmigungsliste: Eine Genehmigungsliste kann helfen, gültige Nutzereingaben zu definieren, anhand derer die Datenbank eingehende und anormal erscheinende Abfragen überprüfen (und zurückweisen) kann. Beispielsweise sind Sonderzeichen und erweiterte URLs zwei Arten von Nutzereingaben, die von Angreifern verwendet werden können, um Informationen über eine Datenbank zu sammeln (bevor sie böswillige Abfragen starten). Wenn Sie die Verwendung dieser Eingaben einschränken, können Sie die Wahrscheinlichkeit eines Angriffs minimieren.
  • Escaping von Nutzereingaben: Unternehmen können sich auch dafür entscheiden, alle von Nutzern eingegebenen Daten zu escapen (d. h. als Eingabe und nicht als Befehl oder Bedingung zu behandeln), damit bestimmte Zeichen oder Wörter nicht für böswillige Anfragen verwendet werden können.

Zugriff nach dem Least-Privilege-Prinzip durchsetzen

Zugriff nach dem Least-Privilege-Prinzip ist das Prinzip, Nutzern nur so viel Zugriff auf geschützte Ressourcen zu gewähren, wie es ihre Rolle erfordert. Dies kann z. B. bedeuten, dass die Anzahl der Nutzer, die Administratorrechte für eine Datenbank erhalten, begrenzt wird oder dass Nutzern temporäre Administratorrechte gewährt werden, die später wieder entzogen werden können.

Die rollenbasierte Beschränkung des Nutzerzugriffs trägt auch dazu bei, die Auswirkungen eines Einbruchs zu minimieren, da Angreifer, die mit gestohlenen Zugangsdaten in eine Datenbank eindringen, auch nur eingeschränkt in der Lage sein werden, geschützte Daten anzuzeigen, zu ändern, zu stehlen oder zu zerstören. Aus dem gleichen Grund sollten Unternehmen den gemeinsamen Zugriff auf Datenbanken über mehrere Websites und Anwendungen hinweg einschränken.

Wie Cloudflare bei der Prävention von SQL-Injection hilft

Mit einem leistungsstarken Portfolio für Anwendungs- und API-Sicherheit hilft Cloudflare Unternehmen, ihre Widerstandsfähigkeit gegen SQLi-Angriffe zu erhöhen:

  • Die Cloudflare-WAF überwacht Traffic-Muster auf potenzielle SQL-Exploits, erkennt Umgehungen und Variationen von Angriffstypen und nutzt fortschrittliche Technologien des maschinellen Lernens, um WAF-Regelsätze an sich entwickelnde Angriffsmethoden anzupassen
  • Cloudflare D1 ist eine Serverless-SQL-Datenbank, die nativ in Workers integriert werden kann, um vorbereitete Anweisungen zu implementieren und Nutzer daran zu hindern, Datenbanken zu ändern oder zu löschen