Was ist SQL-Injection?

Eine der größten Klassen von Web-Schwachstellen ist als „SQL Injection“ oder SQLi bekannt. Structured Query Language, auch bekannt als SQL, ist die Sprache, die für die Interaktion mit den meisten Datenbanken verwendet wird, obwohl je nach Datenbank eine Reihe von Sprachvarianten verwendet werden Plattform. Jede Website, die Benutzerdaten wie Kontoinformationen speichert oder Funktionen zum Hochladen von Benutzern bereitstellt, wie beispielsweise eine Bildhosting-Website, verwendet eine Datenbank zum Speichern dieser Daten.

Tipp: SQL wird im Allgemeinen entweder „ess cue ell“ oder „sequel“ ausgesprochen, wobei die erste Option im britischen Englisch und die zweite im amerikanischen Englisch häufiger vorkommt. Beide Aussprachen werden im Allgemeinen im Zusammenhang mit Datenbanken verstanden.

Was ist SQLi?

SQLi ist eine Schwachstelle, bei der die Webentwickler, die den Code entwerfen, der zwischen den Webserver und die Datenbank implementieren keinen Schutz gegen SQL-Befehle, die von einem gesendet werden Benutzer. Das Problem ist, dass es möglich ist, aus Datenbankanweisungen zu entkommen und neue Argumente oder eine völlig neue Anweisung hinzuzufügen. Die geänderte oder zweite Datenbankanweisung kann eine Reihe von Aktionen ausführen, einschließlich potenziell umfangreicher Löschungen oder Datenlecks.

Exploits drehen sich normalerweise darum, vorhandene Aussagen unter allen Umständen wahr zu machen oder einen zweiten Batch-Befehl bereitzustellen, der eine bestimmte Aktion ausführt, z. B. das Löschen oder Anzeigen aller Daten. Beispielsweise kann eine SQL-Anweisung zum Anmelden bei einer Website prüfen, ob der übermittelte Benutzername und das Passwort mit einem Eintrag in der Datenbank übereinstimmen. Um zu versuchen, Zugriff auf einen SQL-Injection-Exploit zu erlangen, kann versucht werden, eine „or true“-Klausel wie „or 1=1“ hinzuzufügen. Dies würde den Befehl in der Art von „Login with [this] username, if the password is [this], or this statement is true“ ausführen.

So verhindern Sie SQLi

SQLi war früher eine sehr gängige Methode, mit der Websites ihre Datenbank knackten und dann online durchsickerten. Aufgrund einer konzertierten Anstrengung, um sicherzustellen, dass Sicherheitsbewusstsein Teil der Entwicklerschulung ist, wurde diese Klasse von Schwachstellen weitgehend behoben und wird nur noch selten mehr gesehen.

Die richtige Methode, um SQLi zu verhindern, ist die Verwendung von vorbereiteten Anweisungen, auch als parametrisierte Abfragen bekannt. Traditionell werden SQL-Anweisungen deklariert und die Benutzereingaben werden während dieser Deklaration in sie verkettet. Bei vorbereiteten Anweisungen wird der Datenbankbefehl ausgeschrieben und dann führt eine separate Funktion den Befehl aus und fügt Benutzerdaten ein. Dies mag zwar wie ein kleiner Unterschied erscheinen, ändert jedoch die Handhabung des Befehls vollständig. Der Unterschied verhindert, dass sinnvolle SQL-Befehle ausgeführt werden, und behandelt alle Benutzereingaben als Zeichenfolge, wodurch eine SQL-Injection verhindert wird.