Heim >Backend-Entwicklung >PHP-Tutorial >Lösen Sie mehrere gängige Angriffsmethoden bei der Entwicklung von PHP-Websites

Lösen Sie mehrere gängige Angriffsmethoden bei der Entwicklung von PHP-Websites

小云云
小云云Original
2018-03-08 13:12:262355Durchsuche

In diesem Artikel werden hauptsächlich einige gängige Angriffsmethoden zur Lösung der PHP-Website-Entwicklung vorgestellt, darunter: SQL-Injection, Manipulation von GET- und POST-Variablen, Pufferüberlaufangriffe, Cross-Site-Scripting-Angriffe, Browserdaten Manipulation und Remote-Formularübermittlung innerhalb.

1. Verhindern Sie SQL-Injection-Angriffe

Bei SQL-Injection-Angriffen fügen Benutzer Informationen zu Datenbankabfragen hinzu, indem sie Formulare oder GET-Abfragezeichenfolgen manipulieren.

Stellen Sie sich zum Beispiel eine einfache Login-Datenbank vor. Jeder Datensatz in dieser Datenbank verfügt über ein Benutzernamenfeld und ein Passwortfeld. Erstellen Sie ein Anmeldeformular, um Benutzern die Anmeldung zu ermöglichen.

Die Lösung für dieses Problem besteht darin, die in PHP integrierte mysql_real_escape_string()-Funktion als Wrapper um jede Benutzereingabe zu verwenden.

Diese Funktion maskiert Zeichen in einer Zeichenfolge, sodass die Zeichenfolge keine Sonderzeichen wie Apostrophe übergeben kann und MySQL auf der Grundlage der Sonderzeichen arbeiten kann. Listing 7 zeigt den Escape-Code.

2. Verhindern Sie, dass Benutzer Variablen manipulieren

Nur ​​weil ein Benutzer ein gültiges Passwort hat, heißt das nicht, dass er sich an die Regeln hält – er hat viele Möglichkeiten, Schaden anzurichten. Beispielsweise könnte eine Anwendung es Benutzern ermöglichen, spezielle Inhalte anzuzeigen.

Zum Beispiel template.php?pid=33 oder template.php?pid=321. Der Teil der URL nach dem Fragezeichen wird als Abfragezeichenfolge bezeichnet. Da die Abfragezeichenfolge direkt in der URL platziert wird, wird sie auch als GET-Abfragezeichenfolge bezeichnet.

Stimmt hier etwas nicht?

Erstens besteht die implizite Annahme, dass die GET-Variable pid vom Browser sicher ist.

Was wird passieren?

Die meisten Benutzer sind nicht schlau genug, um semantische Angriffe zu konstruieren. Wenn sie jedoch pid=33 im URL-Speicherortfeld des Browsers bemerken, könnten sie Probleme verursachen.

Wenn sie eine andere Zahl eingeben, ist das wahrscheinlich in Ordnung; wenn sie jedoch etwas anderes eingeben, wie einen SQL-Befehl oder den Namen einer Datei (wie /etc/passwd) oder einen anderen Unfug wie „Einen Wert eingeben“. bis zu 3.000 Zeichen lang, und was passiert?

Denken Sie in diesem Fall an die Grundregel: Vertrauen Sie Benutzereingaben nicht.

Anwendungsentwickler wissen, dass von template.php akzeptierte persönliche Identifikatoren (PIDs) numerisch sein sollten. Sie können daher die Funktion is_numeric() von PHP verwenden, um sicherzustellen, dass nicht numerische PIDs nicht akzeptiert werden.

Alles, was Sie tun müssen, ist strlen() zu verwenden, um zu prüfen, ob die Länge der Variablen ungleich Null ist. Wenn ja, verwenden Sie einen rein numerischen regulären Ausdruck, um sicherzustellen, dass das Datenelement gültig ist. Wenn die PID Buchstaben, Schrägstriche, Punkte oder etwas enthält, das einer Hexadezimalzahl ähnelt, erfasst diese Routine dies und blockiert die Seite für Benutzeraktivitäten.

3. Pufferüberlaufangriff

Pufferüberlaufangriff versucht, in der PHP-Anwendung (oder genauer gesagt in Apache oder dem zugrunde liegenden Betriebssystem) einen Speicherzuweisungspufferüberlauf herbeizuführen geschah.

Denken Sie daran, dass Sie Ihre Webanwendung möglicherweise in einer Hochsprache wie PHP schreiben, am Ende aber trotzdem C aufrufen (im Fall von Apache). Wie die meisten Low-Level-Sprachen gelten in C strenge Regeln für die Speicherzuweisung.

Pufferüberlaufangriffe senden eine große Datenmenge an den Puffer, was dazu führt, dass ein Teil der Daten in benachbarte Speicherpuffer überläuft, wodurch der Puffer zerstört oder die Logik neu geschrieben wird. Dies kann zu einem Denial-of-Service, zur Beschädigung von Daten oder zur Ausführung von Schadcode auf dem Remote-Server führen.
Die einzige Möglichkeit, Pufferüberlaufangriffe zu verhindern, besteht darin, die Länge aller Benutzereingaben zu überprüfen.

Beachten Sie, dass Pufferüberlaufangriffe nicht auf lange Zahlen- oder Buchstabenfolgen beschränkt sind. Möglicherweise sehen Sie auch lange hexadezimale Zeichenfolgen (die oft wie xA3 oder xFF aussehen).

Denken Sie daran, dass das Ziel jedes Pufferüberlaufangriffs darin besteht, einen bestimmten Puffer zu überfluten und Schadcode oder Anweisungen in den nächsten Puffer zu platzieren, wodurch Daten beschädigt oder Schadcode ausgeführt wird.

Der einfachste Weg, mit einem Hex-Pufferüberlauf umzugehen, besteht darin, zu verhindern, dass Eingaben eine bestimmte Länge überschreiten.
Wenn Sie es mit einem Formulartextbereich zu tun haben, der längere Einträge in der Datenbank zulässt, gibt es keine Möglichkeit, die Länge der Daten auf der Clientseite einfach zu begrenzen. Nachdem die Daten PHP erreicht haben, können Sie reguläre Ausdrücke verwenden, um alle hexadezimalen Zeichenfolgen zu löschen.

4. Cross-Site-Scripting-Angriff

Bei einem Cross-Site-Scripting-Angriff (XSS) gibt ein böswilliger Benutzer häufig Informationen in ein Formular ein (oder über andere Benutzereingabemethoden) und diese Eingaben werden schädliche clientseitige Token in Prozesse oder Datenbanken eingefügt.

Angenommen, Sie haben auf Ihrer Website ein einfaches Gästebuchprogramm, das es Besuchern ermöglicht, ihren Namen, ihre E-Mail-Adresse und eine kurze Nachricht zu hinterlassen.

Ein böswilliger Benutzer könnte diese Gelegenheit nutzen, um etwas anderes als eine kurze Nachricht einzufügen, beispielsweise ein Bild, das für andere Benutzer ungeeignet ist, oder JavaScript, das den Benutzer auf eine andere Website umleitet oder Cookie-Informationen stiehlt.

Glücklicherweise bietet PHP die Funktion „strip_tags()“, mit der alle von HTML-Tags umgebenen Inhalte entfernt werden können. Die Funktion „strip_tags()“ ermöglicht auch die Bereitstellung einer Liste der zulässigen Tags.

Die Verwendung von strip_tags() für öffentliche Benutzereingaben ist aus Sicherheitsgründen notwendig. Wenn sich das Formular in einem geschützten Bereich befindet (z. B. einem Content-Management-System) und Sie darauf vertrauen, dass Benutzer ihre Aufgaben korrekt ausführen (z. B. HTML-Inhalte für eine Website erstellen), ist die Verwendung von strip_tags() möglicherweise unnötig und beeinträchtigt die Produktivität.

Es gibt noch eine weitere Frage: Wenn Sie Benutzereingaben akzeptieren möchten, z. B. Kommentare zu Beiträgen oder Gastregistrierungsartikeln, und diese Eingaben anderen Benutzern anzeigen müssen, müssen Sie die Antwort in PHPs htmlspecialchars() einfügen. in Funktion.

Diese Funktion wandelt die kaufmännischen Und-Symbole < in HTML-Entitäten um. Beispielsweise wird das kaufmännische Und-Zeichen (&) zu &. Selbst wenn der schädliche Inhalt in diesem Fall der Verarbeitung von strip_tags() im Front-End entgeht, wird er von htmlspecialchars() im Back-End verarbeitet.

5. Datenmanipulation im Browser

Es gibt eine Art Browser-Plug-in, mit dem Benutzer Kopfzeilenelemente und Formularelemente auf der Seite manipulieren können. Mit Tamper Data, einem Mozilla-Plug-in, ist es einfach, einfache Formulare mit vielen versteckten Textfeldern zu manipulieren, um Anweisungen an PHP und MySQL zu senden.

Bevor der Benutzer im Formular auf „Senden“ klickt, kann er „Manipulationsdaten“ starten. Beim Absenden des Formulars wird ihm eine Liste der Formulardatenfelder angezeigt.

Manipulationsdaten ermöglichen es dem Benutzer, diese Daten zu manipulieren, bevor der Browser die Formularübermittlung abschließt.

Der einfachste Weg, sich gegen dieses Tool zu verteidigen, besteht darin, anzunehmen, dass jeder Benutzer Tamper Data (oder ein ähnliches Tool) verwenden könnte.

Geben Sie nur die Mindestmenge an Informationen an, die das System zur Verarbeitung des Formulars benötigt, und übermitteln Sie das Formular an eine spezielle Logik. Beispielsweise sollte das Registrierungsformular nur an die Registrierungslogik übermittelt werden.

Was wäre, wenn Sie eine gemeinsame Formularverarbeitungsfunktion erstellt hätten und viele Seiten diese gemeinsame Logik verwenden?

Was wäre, wenn Sie versteckte Variablen verwenden, um den Fluss zu steuern?

Zum Beispiel kann in einer versteckten Formularvariablen angegeben werden, in welche Datenbanktabelle geschrieben werden soll oder welches Datei-Repository verwendet werden soll. Es gibt 4 Optionen:

Ändern Sie nichts und beten Sie, dass sich keine böswilligen Benutzer im System befinden.

Funktion neu schreiben, um sicherere dedizierte Formularverarbeitungsfunktionen zu verwenden und die Verwendung versteckter Formularvariablen zu vermeiden.

Verwenden Sie md5() oder andere Verschlüsselungsmechanismen, um Tabellennamen oder andere vertrauliche Informationen in versteckten Formularvariablen zu verschlüsseln. Vergessen Sie nicht, sie auf der PHP-Seite zu entschlüsseln.

Verschleieren Sie die Bedeutung von Werten durch die Verwendung von Abkürzungen oder Spitznamen und konvertieren Sie diese Werte dann in PHP-Formularverarbeitungsfunktionen. Wenn Sie beispielsweise auf die Benutzertabelle verweisen möchten, können Sie mit u oder einer beliebigen Zeichenfolge (z. B. u8y90×0jkL) darauf verweisen.

Die letzten beiden Optionen sind nicht perfekt, aber sie sind viel besser, als wenn der Benutzer die Middleware-Logik oder das Datenmodell leicht erraten muss.

6. Remote-Formularübermittlung

Der Vorteil des Webs besteht darin, dass es Informationen und Dienste teilen kann. Die Kehrseite ist das Teilen von Informationen und Dienstleistungen, denn manche Leute machen Dinge ohne Skrupel.

Nehmen Sie ein Formular als Beispiel. Jeder kann eine Website besuchen und über Datei > Speichern unter im Browser eine lokale Kopie des Formulars erstellen. Anschließend kann er den Aktionsparameter so ändern, dass er auf eine vollständig qualifizierte URL verweist (nicht auf formHandler.php, sondern auf http://www.yoursite.com/formHandler.php, da sich das Formular auf dieser Site befindet) und tun, was er möchte Wenn Sie Änderungen vornehmen, klicken Sie auf „Senden“ und der Server empfängt diese Formulardaten als legalen Kommunikationsfluss.

Zunächst sollten Sie $_SERVER['HTTP_REFERER'] überprüfen, um festzustellen, ob die Anfrage von Ihrem eigenen Server kommt. Diese Methode kann die meisten böswilligen Benutzer blockieren, nicht jedoch die raffiniertesten Hacker. Diese Leute sind schlau genug, die Referrer-Informationen im Header zu manipulieren, damit die Remote-Kopie des Formulars so aussieht, als wäre sie von Ihrem Server übermittelt worden.

Eine bessere Möglichkeit, die Remote-Formularübermittlung zu handhaben, besteht darin, ein Token basierend auf einer eindeutigen Zeichenfolge oder einem Zeitstempel zu generieren und dieses Token in die Sitzungsvariable und das Formular einzufügen. Überprüfen Sie nach dem Absenden des Formulars, ob die beiden Token übereinstimmen. Wenn es nicht übereinstimmt, wissen Sie, dass jemand versucht, Daten von einer Remote-Kopie des Formulars zu senden.

Sicherheitszusammenfassung der PHP-Website-Entwicklung:

Verwenden Sie mysql_real_escape_string(), um SQL-Injection-Probleme zu verhindern.

Verwenden Sie reguläre Ausdrücke und strlen(), um sicherzustellen, dass GET-Daten nicht manipuliert wurden.

Verwenden Sie reguläre Ausdrücke und strlen(), um sicherzustellen, dass vom Benutzer übermittelte Daten die Speicherpuffer nicht überlaufen.

Verwenden Sie strip_tags() und htmlspecialchars(), um zu verhindern, dass Benutzer potenziell schädliche HTML-Tags übermitteln.

Verhindern Sie, dass das System durch Tools wie Tamper Data verletzt wird.

Verwenden Sie ein eindeutiges Token, um zu verhindern, dass Benutzer Formulare aus der Ferne an den Server senden.

Verwandte Empfehlungen:

So implementieren Sie die Funktion zur Überprüfung der Formularübermittlungsdaten in PHP und verhindern SQL-Injection und XSS-Angriffe

So verhindern Sie Web-Angriffe – Sicherheitsprobleme, die PHP-Anfänger kennen müssen

Fallanalyse, wie man bösartige IP-Adressen stapelweise blockiert, um Angriffe unter Linux zu verhindern

Das obige ist der detaillierte Inhalt vonLösen Sie mehrere gängige Angriffsmethoden bei der Entwicklung von PHP-Websites. 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