Heim  >  Artikel  >  Datenbank  >  So verhindern Sie die SQL-Injection in MySQL

So verhindern Sie die SQL-Injection in MySQL

(*-*)浩
(*-*)浩Original
2019-05-09 11:51:309291Durchsuche

MySQL-Methode zur Verhinderung von SQL-Injection: 1. Die Berechtigungen von normalen Benutzern und Systemadministratorbenutzern müssen strikt getrennt sein. 2. Benutzer zur Verwendung parametrisierter Anweisungen zwingen 4. Überprüfen Sie den vom Benutzer eingegebenen Inhalt.

So verhindern Sie die SQL-Injection in MySQL

SQL-Injection-Angriffe sind sehr schädlich. Angreifer können damit Daten in der Datenbank lesen, ändern oder löschen und an Benutzernamen und Passwörter in der Datenbank gelangen. und andere vertrauliche Informationen und kann sogar die Berechtigungen des Datenbankadministrators einholen. Wenn Sie erweiterte gespeicherte Prozeduren von SQL Server und benutzerdefinierte erweiterte gespeicherte Prozeduren wiederverwenden können, um einige Systembefehle auszuführen, kann der Angreifer auch die Kontrolle über das System erlangen.

(Empfohlenes Tutorial: MySQL-Video-Tutorial)

Und SQL-Injection ist auch schwer zu verhindern. Website-Administratoren können sich nicht durch die Installation von Systempatches oder die Durchführung einfacher Sicherheitskonfigurationen schützen, und allgemeine Firewalls können SQL-Injection-Angriffe nicht blockieren.

Wie verhindert MySQL die SQL-Injection?

1. Es muss eine strikte Unterscheidung zwischen den Berechtigungen normaler Benutzer und Systemadministratorbenutzern erfolgen.

Wenn ein normaler Benutzer eine andere Drop Table-Anweisung in eine Abfrageanweisung einbettet, darf diese ausgeführt werden?

Da sich die Drop-Anweisung auf die Basisobjekte der Datenbank bezieht, Es muss betrieben werden. Der Benutzer dieser Anweisung muss über entsprechende Berechtigungen verfügen. Im Berechtigungsentwurf besteht für Endbenutzer, also Benutzer von Anwendungssoftware, keine Notwendigkeit, ihnen Berechtigungen zum Erstellen und Löschen von Datenbankobjekten zu erteilen.

Selbst wenn in den von ihnen verwendeten SQL-Anweisungen schädlicher Code eingebettet ist, werden diese Codes aufgrund der Einschränkungen ihrer Benutzerberechtigungen nicht ausgeführt.

2. Erzwingen Sie die Verwendung parametrisierter Anweisungen.

Wenn beim Schreiben einer SQL-Anweisung die vom Benutzer eingegebenen Variablen nicht direkt in die SQL-Anweisung eingebettet werden. Wenn Sie diese Variable über Parameter übergeben, können Sie SQL-Injection-Angriffe wirksam verhindern.

Mit anderen Worten: Benutzereingaben dürfen nicht direkt in SQL-Anweisungen eingebettet werden. Im Gegensatz dazu müssen Benutzereingaben gefiltert werden oder es müssen parametrisierte Anweisungen verwendet werden, um Benutzereingabevariablen zu übergeben. Parametrisierte Anweisungen verwenden Parameter, anstatt Benutzereingabevariablen in die SQL-Anweisung einzubetten. Mit dieser Maßnahme kann

die meisten SQL-Injection-Angriffe verhindern. Leider gibt es nicht viele Datenbank-Engines, die parametrisierte Anweisungen unterstützen. Datenbankentwickler sollten jedoch versuchen, bei der Entwicklung von Produkten parametrisierte Anweisungen zu verwenden.

3. Verwenden Sie die Sicherheitsparameter, die mit der SQL Server-Datenbank geliefert werden.

Um die negativen Auswirkungen von Injektionsangriffen auf die SQL Server-Datenbank zu reduzieren, werden in der SQL Server-Datenbank relativ sichere SQL-Parameter speziell entwickelt. Während des Datenbankentwurfsprozesses sollten Ingenieure versuchen, diese Parameter zu verwenden, um böswillige SQL-Injection-Angriffe zu verhindern.

Beispielsweise wird die Parametersammlung in der SQL Server-Datenbank bereitgestellt. Diese Sammlung bietet Funktionen zur Typprüfung und Längenvalidierung. Wenn der Administrator die Parametersammlung verwendet, werden Benutzereingaben als Zeichenwerte und nicht als ausführbarer Code behandelt. Auch wenn der vom Benutzer eingegebene Inhalt ausführbaren Code enthält, wird dieser von der Datenbank herausgefiltert. Denn zu diesem Zeitpunkt behandelt die Datenbank es nur als gewöhnlichen Charakter. Ein weiterer Vorteil der Verwendung der Parameters-Sammlung besteht darin, dass Typ- und Längenprüfungen erzwungen werden können und Werte außerhalb des Bereichs eine Ausnahme auslösen.

Wenn der vom Benutzer eingegebene Wert nicht den angegebenen Typ- und Längenbeschränkungen entspricht, tritt eine Ausnahme auf und wird dem Administrator gemeldet. Wenn beispielsweise im obigen Fall der durch die Mitarbeiternummer definierte Datentyp ein Zeichenfolgentyp ist, beträgt die Länge 10 Zeichen. Obwohl es sich bei dem vom Benutzer eingegebenen Inhalt ebenfalls um Daten vom Typ Zeichen handelt, beträgt seine Länge 20 Zeichen. Zu diesem Zeitpunkt wird eine Ausnahme ausgelöst, da die Länge der Benutzereingabe die Längenbeschränkung des Datenbankfelds überschreitet.

4. Stärken Sie die Überprüfung der Benutzereingaben.

Im Allgemeinen können zwei Methoden verwendet werden, um SQL-Injection-Angriffe zu verhindern.

Eine besteht darin, die Überprüfung und Überprüfung von Benutzereingabeinhalten zu verstärken parametrisierte Anweisungen. Übergeben Sie Benutzereingaben.

In der SQLServer-Datenbank gibt es viele Tools zur Inhaltsüberprüfung von Benutzereingaben, die Administratoren beim Umgang mit SQL-Injection-Angriffen helfen können. Testen Sie den Inhalt einer String-Variablen und akzeptieren Sie nur den erforderlichen Wert. Lehnen Sie Eingaben ab, die Binärdaten, Escape-Sequenzen und Kommentarzeichen enthalten. Dies trägt dazu bei, Skriptinjektionen zu verhindern und bestimmte Pufferüberlaufangriffe zu verhindern. Testen Sie Benutzereingaben auf Größe und Datentyp und erzwingen Sie entsprechende Grenzwerte und Konvertierungen. Dies trägt dazu bei, absichtliche Pufferüberläufe zu verhindern und hat einen erheblichen Einfluss auf die Verhinderung von Injektionsangriffen.

Zum Beispiel können Sie gespeicherte Prozeduren verwenden, um Benutzereingaben zu überprüfen. Sie können gespeicherte Prozeduren verwenden, um Benutzereingabevariablen zu filtern und beispielsweise bestimmte Sonderzeichen abzulehnen. Im oben genannten Schadcode ist der Schadcode beispielsweise nutzlos, solange die gespeicherte Prozedur das Semikolon herausfiltert.

Bevor Sie die SQL-Anweisung ausführen, können Sie die gespeicherte Prozedur der Datenbank verwenden, um einige Sonderzeichen abzulehnen. Ohne Auswirkungen auf die Datenbankanwendung sollte es der Datenbank gestattet sein, Eingaben mit den folgenden Zeichen abzulehnen. Wie zum Beispiel das Semikolon-Trennzeichen, das der Hauptkomplize von SQL-Injection-Angriffen ist. Beispielsweise als Kommentartrennzeichen. Anmerkungen werden nur während des Datendesigns verwendet. Im Allgemeinen enthält die Abfrageanweisung des Benutzers keinen erforderlichen Kommentarinhalt, sodass er unter normalen Umständen nicht zu unerwarteten Verlusten führen kann. Wenn diese speziellen Symbole abgelehnt werden, haben sie keine Auswirkung, selbst wenn Schadcode in die SQL-Anweisung eingebettet ist.

Überprüfen Sie daher immer die Benutzereingaben und filtern Sie die Benutzereingaben, indem Sie Typ, Länge, Format und Bereich testen. Dies ist eine gängige und wirksame Maßnahme zur Verhinderung von SQL-Injection-Angriffen.

Wie kann man SQL-Injection-Angriffe in einer mehrschichtigen Umgebung verhindern?

In einer mehrschichtigen Anwendungsumgebung sollten alle vom Benutzer eingegebenen Daten überprüft werden, bevor sie in den vertrauenswürdigen Bereich gelangen dürfen.

Daten, die den Validierungsprozess nicht bestehen, sollten von der Datenbank abgelehnt und eine Fehlermeldung an die obere Ebene zurückgegeben werden. Implementieren Sie eine mehrschichtige Verifizierung. Gegen zielstrebige böswillige Benutzer getroffene Vorsichtsmaßnahmen sind gegen entschlossene Angreifer möglicherweise nicht wirksam.

Eine bessere Vorgehensweise besteht darin, Eingaben an der Benutzeroberfläche und an allen nachfolgenden Punkten über Vertrauensgrenzen hinweg zu validieren. Beispielsweise kann die Validierung von Daten in der Clientanwendung eine einfache Skriptinjektion verhindern.

Wenn die nächste Schicht jedoch denkt, dass ihre Eingabe validiert wurde, kann jeder böswillige Benutzer, der den Client umgehen kann, uneingeschränkten Zugriff auf das System erhalten. Daher müssen in mehrschichtigen Anwendungsumgebungen bei der Verhinderung von Injektionsangriffen alle Schichten zusammenarbeiten und auf der Client- und Datenbankseite entsprechende Maßnahmen ergriffen werden, um Injektionsangriffe mit SQL-Anweisungen zu verhindern.

Das obige ist der detaillierte Inhalt vonSo verhindern Sie die SQL-Injection in MySQL. 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