Verhindern von SQL-Injection in Webprojekten

Verhindern von SQL-Injection in Webprojekten

1. Einführung in SQL-Injection

SQL-Injection ist eine der gängigsten Angriffsmethoden auf Netzwerke. Dabei werden keine Betriebssystemfehler ausgenutzt, um Angriffe durchzuführen, sondern die Nachlässigkeit der Programmierer beim Schreiben von Programmen. SQL-Anweisungen werden verwendet, um sich ohne Konto anzumelden und sogar die Datenbank zu manipulieren.

2. Die allgemeine Idee des SQL-Injection-Angriffs

  • 1. Suchen Sie den Ort der SQL-Injection
  • 2. Bestimmen Sie den Servertyp und den Backend-Datenbanktyp
  • 3. SQL-Injection-Angriffe basierend auf unterschiedlichen Server- und Datenbankeigenschaften

Beispiele für SQL-Injection-Angriffe

Beispielsweise werden Sie auf einer Anmeldeoberfläche aufgefordert, Ihren Benutzernamen und Ihr Passwort einzugeben:

Um sich ohne Account anzumelden, können Sie Folgendes eingeben:

Benutzername: 'oder 1 = 1 –

Passwort:

Klicken Sie auf „Anmelden“. Wenn keine spezielle Verarbeitung erfolgt, kann sich der illegale Benutzer problemlos anmelden. (Natürlich haben einige Datenbank-APIs in einigen Sprachen diese Probleme bereits behandelt.)

Warum ist das so? Lassen Sie es uns unten analysieren:

Theoretisch verfügt das im Hintergrund ausgeführte Authentifizierungsprogramm über die folgenden SQL-Anweisungen:

String SQL = "select * from user_table where Benutzername=
' "+Benutzername+" ' und Passwort=' "+Passwort+" '";

Wenn der obige Benutzername und das obige Passwort eingegeben werden, lautet die obige SQL-Anweisung:
SELECT * FROM Benutzertabelle WHERE Benutzername=
''oder 1 = 1 -- und Passwort =''

"""
SQL-Anweisungen analysieren:
Wenn auf die Bedingung „Benutzername=”oder 1=1 Benutzername ist gleich” oder 1=1 folgt, ist diese Bedingung auf jeden Fall erfolgreich.

Fügen Sie dann am Ende zwei - hinzu, was Kommentar bedeutet. Es kommentiert die folgenden Anweisungen und macht sie unwirksam. Auf diese Weise können die Anweisungen immer korrekt ausgeführt werden und Benutzer können das System leicht täuschen und rechtliche Identitäten erlangen.
Dies ist noch relativ sanft. Wenn Sie SELECT * FROM user_table WHERE ausführen
Benutzername='';DROP DATABASE (DB-Name) --' und Passwort=''
Die Folgen sind vorstellbar...
"""

4. So verhindern Sie SQL-Injection

Hinweis: Bei Programmen mit SQL-Injection-Schwachstellen besteht die Gefahr, dass sie vom Client-Benutzer eingegebene Variablen oder über die URL übergebene Parameter akzeptieren müssen, und diese Variable oder dieser Parameter Teil der SQL-Anweisung ist.

Wir sollten immer wachsam sein, was den vom Benutzer eingegebenen Inhalt oder die übergebenen Parameter betrifft. Dies ist das Prinzip „externen Daten kann man nicht trauen“ im Sicherheitsbereich. Betrachtet man die verschiedenen Angriffsmethoden im Bereich der Websicherheit,

Die meisten davon sind auf Verstöße der Entwickler gegen dieses Prinzip zurückzuführen. Daher liegt der naheliegende Gedanke darin, mit der Variablenerkennung, -filterung und -überprüfung zu beginnen, um sicherzustellen, dass die Variablen den Erwartungen der Entwickler entsprechen.

1. Überprüfen Sie den variablen Datentyp und das Format

Wenn Ihre SQL-Anweisung die Form „where id={$id}“ hat und alle IDs in der Datenbank Zahlen sind, sollten Sie vor der Ausführung von SQL überprüfen, ob die Variable „id“ vom Typ int ist. Wenn Sie eine E-Mail erhalten, sollten Sie unbedingt überprüfen und sicherstellen, dass die Variable das Format einer E-Mail-Adresse hat. Dasselbe gilt für andere Typen wie Datum, Uhrzeit usw. Zusammenfassend lässt sich sagen: Solange Variablen in einem festen Format vorliegen, sollten sie vor der Ausführung der SQL-Anweisung streng anhand des festen Formats überprüft werden, um sicherzustellen, dass die Variablen im erwarteten Format vorliegen. Dadurch können SQL-Injection-Angriffe weitgehend vermieden werden.

Beispielsweise sollte unser Produktdesign in unserem vorherigen Beispiel zur Annahme von Benutzernamenparametern zu Beginn der Benutzerregistrierung eine Benutzernamenregel von etwa 5 bis 20 Zeichen haben, die nur aus Groß- und Kleinbuchstaben, Zahlen und einigen sicheren Symbolen bestehen darf, aber keine Sonderzeichen enthalten darf. An diesem Punkt sollten wir über eine check_username-Funktion verfügen, um einheitliche Prüfungen durchzuführen. Es gibt jedoch noch viele Ausnahmen von dieser Regel, wie z. B. Artikelveröffentlichungssysteme, Kommentarsysteme usw., die es Benutzern ermöglichen müssen, beliebige Zeichenfolgen einzugeben. Dies erfordert den Einsatz anderer Lösungen wie Filter.

2. Sonderzeichen filtern

Bei Variablen, die nicht in einem festen Format ermittelt werden können, müssen Sonderzeichen gefiltert oder maskiert werden.

3. Variablen binden und vorkompilierte Anweisungen verwenden

Der mysqli-Treiber von MySQL bietet Unterstützung für vorbereitete Anweisungen. Verschiedene Programmiersprachen haben ihre eigenen Methoden zur Verwendung vorbereiteter Anweisungen.

Tatsächlich ist die Verwendung vorkompilierter Anweisungen zum Binden von Variablen die beste Methode, um SQL-Injection zu verhindern. Die Semantik vorkompilierter SQL-Anweisungen ändert sich nicht. In SQL-Anweisungen werden Variablen durch Fragezeichen dargestellt. Selbst wenn Hacker sehr geschickt sind, können sie die Struktur von SQL-Anweisungen nicht ändern.

Zusammenfassung:

  • 1. Verwenden Sie vorkompilierte SQL-Anweisungen mit Bind-Variablen
  • 2. Verschlüsseln Sie vertrauliche Informationen des Benutzers streng
  • 3. Aktivieren Sie die Fehleranzeige des Webservers in der Produktionsumgebung nicht nach Belieben
  • 4. Verwenden Sie reguläre Ausdrücke, um eingehende Parameter zu filtern
  • 5. String-Filterung
  • 6. Überprüfen Sie, ob es unzulässige Zeichen enthält

Um allgemeine SQL-Injection zu verhindern, müssen Sie grundsätzlich nur die Code-Standards beachten.

Oben habe ich Ihnen erklärt, wie Sie SQL-Injection in Webprojekten verhindern können. Ich hoffe, es wird Ihnen helfen. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Zusammenfassung von 5 effektiven Möglichkeiten zur Verhinderung von SQL-Injection
  • So verhindern Sie SQL-Injection effektiv
  • Demonstration wirksamer Methoden zur Verhinderung von SQL-Injection
  • Eine kurze Erläuterung, warum #{} SQL-Injection verhindern kann

<<:  Wertschätzung des dezenten und eleganten Webdesigns in Schwarz, Weiß und Grau

>>:  Zusammenfassung der Meta-Tags in HTML, Zusammenfassung der Meta-Attribute in HTML5-Heads

Artikel empfehlen

Ein Artikel zum Verständnis von Operatoren in ECMAScript

Inhaltsverzeichnis Unäre Operatoren Boolesche Ope...

Ein Artikel, der Ihnen hilft, jQuery-Animationen zu verstehen

Inhaltsverzeichnis 1. Steuern Sie die Anzeige und...

Bringen Sie Ihnen kostenlos bei, wie Sie AWS-Serverressourcen nutzen

AWS – Amazons Cloud-Computing-Serviceplattform Ic...

Eine kurze Erläuterung zur Verwendung von Slots in Vue

Definition und Verwendung: Verwenden Sie die Slot...

jQuery realisiert die Shuttle-Box-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Detailliertes Beispiel für die JSON-Analyse mit MySQL (5.6 und darunter)

MySQL (5.6 und darunter) analysiert JSON #json-An...

Fünf Lösungen für Cross-Browser-Probleme (Zusammenfassung)

Kurz zusammengefasst: Browserkompatibilitätsprobl...

So verwenden Sie Umgebungsvariablen in der Nginx-Konfigurationsdatei

Vorwort Nginx ist ein auf Leistung ausgelegter HT...

Snake-Spiel mit nativem JS schreiben

In diesem Artikel wird der spezifische Code zum S...

Detaillierte Erklärung zum Erstellen eines Arrays in JavaScript

Inhaltsverzeichnis Erstellen von Arrays in JavaSc...

Drei Schritte zur Lösung des IE-Adressleistensymbol-Anzeigeproblems

<br />Dieses Tutorial zur Erstellung von Web...