Was ist eine SQL-Injektion? [MakeUseOf erklärt]
Die Welt der Internetsicherheit wird mit offenen Ports, Hintertüren, Sicherheitslücken, Trojanern, Würmern, Firewall-Sicherheitslücken und einer Reihe anderer Probleme geplagt, die uns jeden Tag auf Trab halten. Für Privatanwender scheinen Viren und Würmer die schlechtesten Möglichkeiten zu sein. Für jeden, der eine Datenbank betreibt, ist die SQL-Injektion jedoch einer der zerstörerischsten Sicherheitslücken.
Datenbanken sind im Bereich Computer sehr wertvoll. Sie sind wichtig, um Daten als Speicher zu speichern und die verschiedenen Beziehungen zwischen Datenpunkten anzuzeigen. Hier bei MakeUseOf haben wir zahlreiche Datenbanken für verschiedene Aufgaben: eine für alle unsere Artikel, eine für unsere Userbase, eine für unser Rewards-Programm, und die Liste geht weiter. Was passiert, wenn unsere Datenbanken böswillig angegriffen oder sogar zerstört werden??
Wenn Sie keinen tatsächlichen Zugriff auf eine Datenbank haben, ist die SQL-Injektion eine der bekanntesten Angriffsformen. Lesen Sie weiter, um zu erfahren, was genau ist und wie gefährlich es sein kann.
Was ist SQL??
Um die SQL-Injection zu verstehen, müssen Sie zuerst verstehen, was SQL ist und wie es sich auf eine Website bezieht. SQL (Structured Query Language) ist eine Programmiersprache, die für die Verwaltung tabellarischer Daten optimiert ist. In jeder Hinsicht ist dies nur eine Möglichkeit für Programmierer, mit einer Datenbank zu kommunizieren und ihr Befehle zu geben.
Wenn eine Datenbank bearbeitet wird, werden SQL-Befehle gegeben und verarbeitet. Wenn Sie über alle Zeitpunkte nachdenken, zu denen eine Datenbank bearbeitet wird, kommen Sie zu dem Schluss, dass dies nur in einer Handvoll Situationen geschieht:
- Wenn neue Daten eingefügt werden müssen,
- Wenn aktuelle Daten geändert werden müssen,
- Wenn alte Daten gelöscht werden müssen,
- Wenn ein bestimmtes Datenelement gesucht und abgerufen werden muss.
Immer wenn eine dieser Aktionen ausgeführt werden muss, wird irgendwo auf einem Server ein SQL-Befehl ausgeführt. In den meisten Fällen kann der Programmierer ermitteln, wann und wo diese SQL-Befehle im Quellcode vorkommen. Es gibt jedoch unvermeidliche Umstände, unter denen ein Benutzer die Manipulation einer Datenbank erzwingen kann - und diese Möglichkeiten sind überall vorhanden.
Haben Sie sich schon einmal auf einer Website angemeldet? Haben Sie schon einmal einen Kommentar zu einem Blogartikel oder eine Antwort in einem Forenthread gepostet? Hast du schon mal eine Facebook-Nachricht an einen Freund geschickt? Eine E-Mail in Gmail geschrieben? Bei Google nach einer Website gesucht? Jedes Mal, wenn Sie ein Eingabefeld auf einer Website sehen (Benutzername, Kennwort, Suchabfrage, Meldungsfeld usw.), wird dieser Text an die Datenbank gesendet und entsprechend bearbeitet.
Wenn nun ein böswilliger Benutzer eine Datenbank manipulieren möchte, gibt es für ihn nicht viele Möglichkeiten. Eine Möglichkeit wäre, tatsächlich zu gewinnen körperlich Zugriff auf den Server und zerstören Sie ihn an seiner Basis. Andernfalls ist es für den böswilligen Benutzer am sinnvollsten, einen vorhandenen SQL-Befehl bei Verwendung eines Eingabefelds zu entführen, wodurch der Server gezwungen wird, einen anderen Befehl auszuführen als ursprünglich beabsichtigt.
Die SQL-Injektionstechnik
Dieser Vorgang des Hijacking eines vorhandenen SQL-Befehls bezieht sich auf die SQL-Injection. Warum heißt das Spritzen? Da beim Entführen eines SQL-Befehls der Benutzer seinen eigenen SQL-Code eingeben muss, wenn er ein Eingabefeld verwendet. Klingt das verwirrend? Lassen Sie mich mit einem Beispiel veranschaulichen.
Betrachten Sie die Anmeldeseite von MakeUseOf. Wenn Sie Ihren Benutzernamen und Ihr Passwort eingeben und auf klicken “einreichen“, Sie zwingen den Webserver, einen SQL-Befehl zu generieren, der die Informationen enthält, die Sie gerade angegeben haben, dh Ihren Benutzernamen und Ihr Kennwort. Die Datenbank empfängt die Informationen, überprüft, ob die Kombination aus Benutzername und Kennwort korrekt ist, und gibt Ihnen dann den richtigen Zugriff auf andere Bereiche der Website.
Stellen Sie sich jetzt vor, was passieren würde, wenn ein böswilliger Benutzer seinen Benutzernamen und sein Kennwort nicht eingibt, sondern stattdessen einen SQL-Befehl als seinen Benutzernamen eingibt. Wenn der Servercode nicht ordnungsgemäß gesichert ist, erhält die Datenbank den fehlerhaften Benutzernamen (der eigentlich ein SQL-Befehl ist) und führt ihn tatsächlich als Befehl aus.
Deshalb wird es Injektion genannt. Der SQL-Befehl wird auf völlig legitime Weise in die Datenbank eingefügt, um ihn so zu manipulieren, dass er etwas tut, was er nicht tun sollte.
Ein erweitertes Beispiel
Bisher habe ich die SQL-Injection in übergeordneten Begriffen beschrieben, damit jeder verstehen kann, auch ohne Programmierkenntnisse. In diesem Abschnitt werde ich ein aktuelles Beispiel dafür geben Wie Diese Technik ist möglich. Wenn Sie ein Anfänger von SQL sind oder sich noch nie mit der Programmierung befasst haben, können Sie diesen Abschnitt leise überspringen.
Wenn Sie sich bei einer Website anmelden, kann der Code in SQL geschrieben werden:
SELECT user_id
FROM users_db
WHERE username = "$ username" UND Kennwort = "$ Kennwort"
Grundsätzlich fordert der Befehl die Datenbank auf, alle zurückzugeben user_ids vom Tisch users_db die der eingegebenen Kombination aus Benutzername und Passwort entsprechen. Sieht ganz gut aus und gut, richtig?
Nehmen wir an, das Anmeldeformular erhielt die folgenden Eingaben:
Benutzername: David
Passwort: fubar 'ODER' x '=' x
Beachten Sie, dass das Kennwortfeld nicht mit einem Apostroph beginnt oder endet. Wenn der Server diesen Anmeldeversuch erhält, wird alles, was im Kennwortfeld angegeben ist, durch das Kennwort ersetzt. Der resultierende SQL-Befehl sieht folgendermaßen aus:
SELECT user_id
FROM users_db
WHERE username = "David" UND Passwort = 'fubar 'ODER' x '=' x'
Wenn der Server diesen Befehl ausführt, wird der letzte Teil dieses SQL-Befehls ausgeführt immer zurückkehren Dies bedeutet, dass der böswillige Benutzer einen beliebigen Benutzernamen eingeben und sofort Zugriff auf dieses Konto erhalten kann, da der Login funktionieren würde, unabhängig davon, ob er das Kennwort richtig vergeben hat oder nicht.
Natürlich ist das Einloggen in das Konto eines anderen Benutzers ein eher mildes Vergehen, wenn Sie es mit all den anderen möglichen Hackversuchen vergleichen: Löschen ganzer Datenbanken, Zusammenfassen aller Daten oder sogar stehlen die Daten in den Datenbanken.
Professionelle Webentwickler werden immer besser, um solche Tricks zu verhindern, aber ab und zu hören Sie, dass ein Unternehmen durch einen SQL-Injection-Angriff einen Verlust erlitt. Wenn es passiert, wissen Sie jetzt, was es bedeutet und wie es möglich ist.
Bildnachweis: Intro-Bild über Shutterstock, Datenbankschema über Shutterstock, gehackt über Shutterstock