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 Datenbankplattform eine Reihe von Sprachvarianten verwendet werden. Jede Website, die Benutzerdaten wie Kontoinformationen speichert oder Benutzer-Upload-Funktionen bereitstellt, wie beispielsweise eine Bildhosting-Website, verwendet eine Datenbank, um diese Daten zu speichern.
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 dem Webserver und der Datenbank kommuniziert, keinen Schutz gegen SQL-Befehle implementieren, die von einem Benutzer gesendet werden. 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 wie das Löschen oder Anzeigen aller Daten ausführt. 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 Zugriff zu erlangen, kann ein SQL-Injection-Exploit versuchen, 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 für Websites, um ihre Datenbank zu knacken und dann online zu durchsickern. 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 verhindert wird, dass SQL-Injection stattfindet.