Heim  >  Artikel  >  Datenbank  >  Was ist eine SQL-Injection-Sicherheitslücke?

Was ist eine SQL-Injection-Sicherheitslücke?

清浅
清浅Original
2019-05-11 10:01:179469Durchsuche

SQL-Injection-Schwachstelle bezieht sich auf das Einfügen böswillig eingegebener SQL-Befehle in Webformularübermittlungen oder die Eingabe von Abfragezeichenfolgen für Domänennamen oder Seitenanforderungen, wodurch der Server letztendlich dazu verleitet wird, böswillige SQL-Befehle auszuführen

SQL-Injection-Schwachstelle

Wie der Name schon sagt, ermöglicht die SQL-Injection-Schwachstelle Angreifern, böswillige Eingaben in SQL-Anweisungen einzuschleusen. Um dieses Problem vollständig zu verstehen, müssen wir zunächst verstehen, wie serverseitige Skriptsprachen SQL-Abfragen verarbeiten.

Angenommen, eine Funktion in einer Webanwendung generiert eine Zeichenfolge mithilfe der folgenden SQL-Anweisung:

$statement = "SELECT * FROM users WHERE username = 'bob' AND password = 'mysecretpw'";

Diese SQL-Anweisung wird an eine Funktion übergeben, die die Zeichenfolge an die verbundene A-Datenbank sendet wo es analysiert, ausgeführt und die Ergebnisse zurückgegeben werden.

Sie haben vielleicht bemerkt, dass diese Anweisung einige neue Sonderzeichen enthält:

  • *: ist die SQL-Datenbankanweisung, um alle Spalten der ausgewählten Datenbankzeile zurückzugeben

  • =: ist eine Anweisung für die SQL-Datenbank, nur Werte zurückzugeben, die mit der gesuchten Zeichenfolge übereinstimmen.

  • ': wird verwendet, um die SQL-Datenbank darüber zu informieren um nach einer Zeichenfolge zu suchen. Start- oder Endposition

Betrachten Sie nun das folgende Beispiel, in dem ein Website-Benutzer den Wert von „$user“ und „$password“ ändern kann, beispielsweise in einer Anmeldung Formular:

$statement = "SELECT * FROM users WHERE username = '$user' AND password= '$password'";

Wenn die Anwendung die Eingabe nicht bereinigt, kann der Angreifer problemlos eine beliebige spezielle SQL-Syntax in die Anweisung einfügen:

$statement = "SELECT * FROM users WHERE username = 'admin'; -- ' AND password= 'anything'";= 'anything'";
  • admin'; die Eingabe des Angreifers, die zwei neue Sonderzeichen enthält:

  • : Wird verwendet, um dem SQL-Parser anzuzeigen, dass die aktuelle Anweisung beendet wurde (in den meisten Fällen nicht erforderlich)

  • - : weist den SQL-Parser den Rest der Zeile an

Diese SQL-Injection entfernt effektiv die Passwortvalidierung und gibt den Datensatz des vorhandenen Benutzers zurück, in diesem Fall „admin“ Angreifer können sich jetzt mit einem Administratorkonto anmelden, ohne ein Passwort anzugeben.

Das obige ist der detaillierte Inhalt vonWas ist eine SQL-Injection-Sicherheitslücke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

In Verbindung stehende Artikel

Mehr sehen