1. Einführung in SQL-InjectionSQL-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
Beispiele für SQL-Injection-AngriffeBeispielsweise 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
1. Überprüfen Sie den variablen Datentyp und das FormatWenn 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 filternBei Variablen, die nicht in einem festen Format ermittelt werden können, müssen Sonderzeichen gefiltert oder maskiert werden. 3. Variablen binden und vorkompilierte Anweisungen verwendenDer 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:
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:
|
<<: 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
Inhaltsverzeichnis Unäre Operatoren Boolesche Ope...
Inhaltsverzeichnis 1. Steuern Sie die Anzeige und...
AWS – Amazons Cloud-Computing-Serviceplattform Ic...
In diesem Artikel wird die Click-to-Switch-Bildko...
Vorwort Vor kurzem war ich damit beschäftigt, ein...
Definition und Verwendung: Verwenden Sie die Slot...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Vergleichen Sie die leere Zeic...
MySQL (5.6 und darunter) analysiert JSON #json-An...
In diesem Artikel finden Sie das grafische Tutori...
Kurz zusammengefasst: Browserkompatibilitätsprobl...
Vorwort Nginx ist ein auf Leistung ausgelegter HT...
In diesem Artikel wird der spezifische Code zum S...
Inhaltsverzeichnis Erstellen von Arrays in JavaSc...
<br />Dieses Tutorial zur Erstellung von Web...