Database
 sql >> Datenbank >  >> RDS >> Database

Was ist SQL-Injection?

Einführung in die SQL-Injection

  • SQL-Injection ist eine Schwachstelle oder eine Technik, die die Datenbank einer Website oder einer Webanwendung zerstören kann. Es ist einer der am weitesten verbreiteten webbasierten Angriffe.
  • Das Hauptziel einer SQL-Injection besteht darin, Zugriff auf die Datenbank einer Website zu erhalten. Damit eine SQL-Injection funktioniert, braucht man also eine Webanwendung, die mit einer Datenbank verbunden ist.
  • Da die Datenbank alle Daten enthält, einschließlich des Administratorpassworts, d. h. des Anmeldepassworts des Eigentümers, kann der Angreifer der Website auf die Verwaltungsseite zugreifen, um die Website zu bearbeiten, indem er ein Webformular ausfüllt.
  • Das Webformular enthält Benutzernamen und Passwörter. Wenn der Benutzer etwas in das Eingabefeld des Webformulars eingibt, wird die SQL SELECT-Abfrage ist in der Datenbank implementiert.
  • Das System versucht, die Eingaben, d. h. den vom Benutzer eingegebenen Benutzernamen und das Passwort, mit dem bereits in der Datenbank gespeicherten Benutzernamen und Passwort abzugleichen. Wenn beide Eingaben übereinstimmen, erhält der Benutzer den Zugriff, andernfalls wird der Zugriff dem Benutzer verweigert.
  • Es gibt bestimmte Websites, die keinen Mechanismus haben, um andere Eingaben zu blockieren. Solche Websites sind anfällig für SQL-Injection. In diesem Fall kann jede beliebige SQL-Abfrage als Eingabe eingegeben werden und wird vom System ausgeführt.
  • Der Angreifer kann beispielsweise eine Abfrage eingeben, um die gesamte Datenbank herunterzuladen, die Datenbank zu löschen, die Datenbank zu ändern und die Bedingung immer wahr zu machen. Wenn eine Passwortbedingung immer wahr gemacht wird, spielt es keine Rolle, ob ein Passwort eingegeben wird. Für das Passwort greift das System auf diejenigen zu, die in der Datenbank gespeichert sind, aber wenn eine Abfrage gemacht wird, um die Passworttabelle in der Datenbank zu löschen, beginnt das System, irgendein Passwort zu nehmen. Auf diese Weise kann sich der Angreifer leicht Zugriff auf die Datenbank verschaffen. Jetzt kann er alle Passwörter der auf der Website angemeldeten Personen, die verschiedenen Tabellen und deren Inhalt, die interne Struktur der Website und alle anderen Informationen im Zusammenhang mit der Website kennen.
  • Diese Methode wird als SQL-Injection bezeichnet, bei der Sie eine Abfrage in die Datenbank einfügen, um sie zu manipulieren und unbefugten Zugriff darauf zu erlangen. Dies ist die gefährlichste Art von Website-Angriff für eine SQL-basierte Datenbank.
  • Eine Möglichkeit, solche Angriffe zu verhindern, besteht darin, unnötige Eingaben außer den Benutzernamen und Passwörtern zu blockieren.
  • SQL-Injection-Befehle werden zur Laufzeit ausgeführt. Vermeiden Sie also dynamische Eingabebefehle. Verhindern Sie die Datenbank mit der Web Application Firewall . Geben Sie auch niemandem vertrauliche Informationen über die Website preis.
  • Websites können durch solche SQL-Angriffe enorme Daten- und finanzielle Verluste erleiden.

Beispiel:

Angenommen, Es gibt eine Webanwendung mit einer damit verbundenen Datenbank. Diese Webanwendung nimmt möglicherweise Eingaben des Benutzers entgegen und speichert die Informationen in der Datenbank oder ruft die Daten aus der Datenbank ab und zeigt sie dem Benutzer an.

In beiden Fällen gibt es eine SQL-Abfrage oder Datenbankabfrage, die in der Webanwendung generiert und an die Datenbank gesendet wird, und diese Abfrage wird in der Datenbank ausgeführt, und relevante Informationen werden an die Webanwendung zurückgegeben. So funktioniert das normale Szenario.

Wenn der Angreifer also SQL-Injection verwendet, versucht er, diese Datenbankabfrage zu manipulieren, um sie dazu zu bringen, etwas zu tun, was sie im Idealfall nicht tun sollte. Der Angreifer ändert also die SQL-Abfrage, manipuliert sie, fügt eine böswillige Zeichenfolge in die SQL-Abfrage ein und lässt sie dann auf nicht autorisierte Weise etwas tun. Nun wird also die Datenbankabfrage vom Angreifer manipuliert, dann wird diese bösartige Abfrage an die Datenbank gesendet, dort ausgeführt und die entsprechenden Ergebnisse zurückgeliefert.

Dies wird als SQL-Injection bezeichnet. SQL-Injection ist eine Code-Injection-Technik, mit der schädliche und dynamische SQL-Anweisungen ausgeführt werden. SQL-Angriffe sind etwas, mit dem der Angreifer die Kontrolle über Datenbankserver übernimmt.

So verhindern Sie die SQL-Einschleusung

  1. Vermeiden Sie die Verwendung von dynamischem SQL

Die Eingaben des Benutzers sollten nicht direkt in die SQL-Abfrage gestellt werden, die auf der Datenbank ausgeführt wird. Anstatt dynamisches SQL zu verwenden, sollten gespeicherte Prozeduren, vorbereitete Anweisungen und parametrisierte Abfragen verwendet werden, da sie im Vergleich zu dynamischen SQL-Abfragen sicherer sind.

  • Benutzereingaben müssen bereinigt werden

Der Datentyp, der vom Benutzer bereitgestellt wird, muss mit dem erwarteten Typ übereinstimmen und überprüft werden.

  • Sensible Daten sollten nicht im Klartext vorliegen

Bevor vertrauliche Daten wie Passwörter in der Datenbank gespeichert werden, sollten sie ordnungsgemäß mit Hashes verschlüsselt werden. Auf die verschlüsselten Hashes muss Salting angewendet werden, um den vertraulichen Daten eine zusätzliche Sicherheitsebene zu bieten.

  • Datenbankfehler sollten dem Benutzer nicht direkt angezeigt werden

Fehlerinformationen, die dem Angreifer angezeigt werden, können ihm helfen, Informationen über die Datenbank zu erhalten.