Schlüsselpunkte
Cross-Site-Skriptangriffe sind einer der fünf wichtigsten Sicherheitsangriffe, die jeden Tag im Internet stattfinden, und Ihre PHP-Skripte sind möglicherweise nicht verschont. Dieser Angriff, auch als XSS bezeichnet, ist im Grunde genommen ein Code -Injektionsangriff, der aufgrund einer falschen Überprüfung der Benutzerdaten möglich ist, die normalerweise über ein Webformular oder mit einem geänderten Hyperlink in eine Seite eingefügt wird. Der injizierte Code kann jeder böswillige Clientcode wie JavaScript, VBScript, HTML, CSS, Flash usw. sein. Dieser Code wird verwendet, um schädliche Daten auf dem Server zu speichern oder böswillige Aktionen im Browser des Benutzers auszuführen. Leider treten Skriptangriffe im Cross-Standort vor, hauptsächlich, weil Entwickler keinen sicheren Code bereitstellen. Es liegt in einer Verantwortung für jeden PHP -Programmierer, zu verstehen, wie er seine PHP -Skripte angreift, um mögliche Sicherheitslücken auszunutzen. Lesen Sie diesen Artikel und Sie erfahren mehr über Skriptangriffe mit Cross-Site-Skripten und wie Sie sie in Ihrem Code verhindern.
Lernen Sie anhand von Beispielen
Schauen wir uns den folgenden Code -Snippet an.
<form action="post.php" method="post"> <input type="text" name="comment" value=""> <input type="submit" name="submit" value="Submit"> </form>
Hier haben wir ein einfaches Formular mit einem Textfeld für die Dateneingabe und eine Schaltfläche Senden. Nach der Übermittlung des Formulars übermittelt es die Daten an post.php zur Verarbeitung. Angenommen, post.php gibt nur Daten aus, wie unten gezeigt:
<?php echo $_POST["comment"]; ?>
Ohne Filterung kann der Hacker Folgendes über das Formular einreichen, wodurch ein Popup im Browser mit der Nachricht "gehackt" generiert wird.
alert("hacked")
Dieses Beispiel, obwohl bösartiger Natur, scheint jedoch nicht viel Schaden zu verursachen. Überlegen Sie jedoch, was passiert, wenn JavaScript -Code geschrieben wird, um die Cookies des Benutzers zu stehlen und vertrauliche Informationen daraus zu extrahieren? Es gibt schlechtere XSS -Angriffe als einfache Alert () -Anrufe.
Cross-Site-Skriptangriffe können in zwei Kategorien unterteilt werden, basierend darauf, wie sie böswillige Nutzlasten liefern: nicht-persistentes XSS und persistierendes XSS. Bitte erlauben Sie mir, jeden Typ im Detail zu besprechen.
auch als reflektierender XSS -Angriff bezeichnet, bedeutet, dass böswilliger Code nicht tatsächlich auf dem Server gespeichert wird, sondern dem Opfer übergeben und präsentiert wird, was die beliebtere XSS -Strategie unter den beiden Liefermethoden ist. Angriffe werden aus externen Quellen wie E-Mails oder Websites von Drittanbietern initiiert. Hier ist ein Teil eines einfachen Suchergebnisskripts:
<form action="post.php" method="post"> <input type="text" name="comment" value=""> <input type="submit" name="submit" value="Submit"> </form>
Dieses Beispiel kann eine sehr unsichere Ergebnisseite sein, auf der die Suchabfrage an den Benutzer zurückgeführt wird. Das Problem hierfür ist, dass die $_GET["query"]
Variable nicht verifiziert oder entkommen wird, sodass der Angreifer den folgenden Link an das Opfer senden kann:
<?php echo $_POST["comment"]; ?>
Es ist keine Überprüfung erforderlich, die Seite enthält:
alert("hacked")
Diese Art von Angriff tritt auf, wenn der böswillige Code den Überprüfungsprozess bestanden hat und im Datenspeicher gespeichert ist. Dies kann ein Kommentar, eine Protokolldatei, eine Benachrichtigungsnachricht oder ein anderer Teil der Website sein, für die Benutzereingaben erforderlich sind. Später, wenn diese spezifischen Informationen auf der Website angezeigt werden, wird der böswillige Code ausgeführt. Verwenden wir das folgende Beispiel, um ein grundlegendes dateibasiertes Kommentarsystem zu erstellen. Unter der Annahme des gleichen Formulars, das ich zuvor eingeführt habe, weist das empfangende Skript nur die Kommentare an die Datendatei an.
<?php // 根据查询获取搜索结果 echo "You searched for: " . $_GET["query"]; // 列出搜索结果 ...
Andere Orte, der Inhalt von comments.txt wird dem Besucher angezeigt:
http://example.com/search.php?query=alert("hacked")
Wenn ein Benutzer einen Kommentar abgibt, wird er in der Datendatei gespeichert. Die gesamte Datei (und daher die gesamte Kommentarserie) wird dann dem Leser angezeigt. Wenn böswilliger Code eingereicht wird, wird er gespeichert und angezeigt, wie es ohne Bestätigung oder Flucht ist.
Verhindern Sie die Skriptangriffe mit Querplätzen
Zum Glück ist es so einfach, wie XSS auf ungeschützten Websites angreift, und es ist genauso einfach, sie zu verhindern. Die Prävention muss jedoch immer berücksichtigt werden, bevor sie eine Codezeile schreiben. Die erste Regel, dass eine Webumgebung (ob Entwicklung, Staging oder Produktion) "durchgesetzt" werden muss, besteht darin, Daten von Benutzern oder anderen Quellen von Drittanbietern niemals zu vertrauen. Dies kann nicht zu viel betont werden. Jedes Bit der Dateneingabe muss bei der Ausgabe verifiziert und entkommen. Dies ist die goldene Regel, um XSS zu verhindern. Um zuverlässige Sicherheitsmaßnahmen zur Verhinderung von XSS -Angriffen zu implementieren, sollten wir auf die Datenüberprüfung, die Datenreinigung und die Ausgabe entkommen.
Datenüberprüfung ist der Prozess, um sicherzustellen, dass die Anwendung mit den richtigen Daten ausgeführt wird. Wenn Ihr PHP -Skript erwartet, dass der Benutzer eine Ganzzahl eingeben, werden alle anderen Datentypen verworfen. Jede empfangene Benutzerdaten müssen überprüft werden, um sicherzustellen, dass sein Typ korrekt ist und verworfen wird, wenn sie den Überprüfungsprozess fehlschlägt. Wenn Sie beispielsweise eine Telefonnummer überprüfen möchten, werden Sie jede Zeichenfolge, die die Buchstaben enthalten, verwerfen, da die Telefonnummer nur Zahlen enthalten sollte. Sie sollten auch die Länge der Saite berücksichtigen. Wenn Sie ein wenig lockerer sein möchten, können Sie eine begrenzte Reihe von Sonderzeichen wie Pluszeichen, Klammern und Striche zulassen, die häufig verwendet werden, um Telefonnummern spezifisch für Ihr Zielgebiet zu formatieren.
<form action="post.php" method="post"> <input type="text" name="comment" value=""> <input type="submit" name="submit" value="Submit"> </form>
Datenreinigung konzentriert sich auf die Manipulation von Daten, um sicherzustellen, dass sie durch die Entfernung unerwünschter Bits aus den Daten und die Normalisierung in der richtigen Form sind. Wenn Sie beispielsweise einfache Textzeichenfolgen als Benutzereingabe erwarten, möchten Sie möglicherweise alle HTML -Tags daraus entfernen.
<?php echo $_POST["comment"]; ?>
Manchmal können die Datenüberprüfung und Reinigung/Normalisierung gleichzeitig durchgeführt werden.
alert("hacked")
Um die Integrität der Anzeige-/Ausgabedaten zu schützen, sollten Sie den Daten entkommen, wenn sie dem Benutzer angezeigt werden. Dies verhindert, dass der Browser unerwartete Bedeutung auf eine spezielle Zeichensequenz anwendet, die gefunden werden kann.
<?php // 根据查询获取搜索结果 echo "You searched for: " . $_GET["query"]; // 列出搜索结果 ...
zusammen!
Um die drei Aspekte der Datenverarbeitung besser zu verstehen, schauen wir uns das vorherige Datei-basierte Kommentarsystem erneut an und ändern Sie es, um die Sicherheit zu gewährleisten. Die potenzielle Sicherheitsanfälligkeit im Code beruht auf der Tatsache, dass $_POST["comment"]
blind an die Datei comments.txt angeschlossen und dann direkt an den Benutzer angezeigt wird. Um sicherzustellen, dass es sicher ist, sollte der Wert $_POST["comment"]
vor dem Hinzufügen zur Datei überprüft und gereinigt werden, und er sollte entkommen, wenn der Dateiinhalt dem Benutzer angezeigt wird.
http://example.com/search.php?query=alert("hacked")
Das Skript überprüft zunächst eingehende Kommentare, um sicherzustellen, dass der Benutzer eine String von unglangen Längen geliefert hat. Schließlich sind leere Kommentare nicht sehr interessant. Die Datenvalidierung muss in einem gut definierten Kontext durchgeführt werden, was bedeutet, dass ich sie entsprechend validiere, indem ich die Daten in eine Ganzzahl konvertiere und als Ganzzahl verarbeitet. Wenn dies zu ungültigen Daten führt, verwerfen Sie sie einfach und lassen Sie den Benutzer wissen. Das Skript reinigt dann die Kommentare, indem Sie alle möglicherweise enthaltenen HTML -Tags entfernen. Schließlich abrufen, filtern und Kommentare anzeigen. Typischerweise reicht die htmlspecialchars()
-Funktion aus, um den Ausgang zu filtern, der im Browser angezeigt werden soll. Wenn die Charaktercodierung, die Sie auf einer Webseite verwenden, nicht ISO-8859-1 oder UTF-8 ist, müssen Sie möglicherweise htmlentities()
verwenden. Weitere Informationen zu diesen beiden Funktionen finden Sie in den jeweiligen Beschreibungen in der offiziellen PHP -Dokumentation. Denken Sie daran, dass es keine einzige Lösung gibt, die auf einem sich entwickelnden Medium wie dem Web zu 100% sicher ist. Testen Sie Ihren Verifizierungscode gründlich mit den neuesten XSS -Testvektoren. Die Verwendung der Testdaten aus den folgenden Quellen sollte zeigen, ob Ihr Code für XSS -Angriffe immer noch anfällig ist.
Zusammenfassung
Ich hoffe, dieser Artikel erklärt Ihnen sehr gut, welche Skriptangriffe im Cross-Site-Skript sind und wie Sie sie in Ihrem Code verhindern können. Vertrauen Sie niemals Daten von Benutzern oder anderen Quellen von Drittanbietern. Sie können sich schützen, indem Sie eingehende Werte in einem gut definierten Kontext validieren, Daten zur Schutz des Codes und zur Ausgabe entkommen, um Ihre Benutzer zu schützen. Stellen Sie nach dem Schreiben des Codes sicher, dass Sie ordnungsgemäß funktionieren, indem Sie den Code so gründlich wie möglich testen.
(Bild von Inge Scheper / Shutterstock)
Wenn Sie diesen Beitrag mögen, werden Sie es mögen, einen Ort zu erlernen, an dem Sie neue Fähigkeiten und Fähigkeiten von Mastern erlernen können. Mitglieder können sofort auf alle E-Books und interaktiven Online-Kurse von SitePoint zugreifen, z. B. Sprung Start PHP.
Kommentare in diesem Artikel wurden geschlossen. Fragen zu PHP haben? Warum nicht Fragen in unserem Forum stellen?
FAQs (FAQ) über PHP-Sicherheits- und Cross-Site-Scripting-Angriffe (XSS)
Cross-Site-Skriptangriffe (XSS) können einen erheblichen Einfluss auf PHP-Anwendungen haben. Sie können zu Datendiebstahl, Sitzung der Sitzung, Korruption auf Website und sogar der Verteilung des böswilligen Code an Benutzer führen. XSS greift an, die Schwachstellen in Webanwendungen ausnutzen, um böswillige Skripte zu injizieren und sie dann mit dem Browser des Benutzers auszuführen. Dies kann die Benutzerinteraktion mit der Anwendung gefährden und vertrauliche Informationen offenlegen.
Identifizieren potenzieller XSS -Schwachstellen in PHP -Anwendungen erfordert eine Kombination aus manueller Codeüberprüfung und automatisierte Tests. Suchen Sie Bereiche im Code, in denen die Benutzereingabe direkt in der Ausgabe ohne ordnungsgemäße Reinigung oder Überprüfung enthalten ist. Automatisierungstools wie XSS -Scanner können auch dazu beitragen, potenzielle Schwachstellen zu identifizieren, indem verschiedene XSS -Angriffsvektoren getestet werden.
XSS -Angriffe umfassen normalerweise die Injektion von böswilligen Skripten in Webseiten, die von anderen Benutzern angezeigt werden. Dies kann auf verschiedene Arten erfolgen, z. B. das Einbetten von Skripten in URL -Parameter, Formulareingänge und sogar Cookies. Das böswillige Skript kann dann Aktionen im Namen des Benutzers ausführen, z.
Verhindern von XSS -Angriffen in PHP -Anwendungen beinhaltet die Validierung und Reinigung der Benutzereingabe, der codierten Ausgabe und der Verwendung geeigneter HTTP -Header. Behandeln Sie die Benutzereingabe immer als nicht vertrauenswürdig und validieren Sie sie gegen die zulässige Liste akzeptabler Werte. Reinigen Sie die Eingabe, um Zeichen oder Code zu entfernen, die möglicherweise schädlich sein. Die Ausgabe ist codiert, um sicherzustellen, dass alle Zeichen, die schädlich sind, harmlos werden. Verwenden Sie HTTP -Header wie Inhaltssicherheitsrichtlinien, um die Quelle von Skripten und anderen Ressourcen zu begrenzen.
HTTP -Header in der Inhaltssicherheit (CSP) spielen eine entscheidende Rolle bei der Verhinderung von XSS -Angriffen. Sie können eine Domäne angeben, die der Browser als eine gültige Quelle für ausführbare Skripte betrachten sollte. Dies bedeutet, dass der Browser es auch dann ausführt, wenn ein Angreifer ein Skript in Ihre Webseite injizieren kann, es sei denn, die Quelle des Skripts ist in Ihrem CSP whitelistet.
Speicher -XSS -Angriffe beinhalten die Injektion von böswilligen Skripten, die dauerhaft auf dem Zielserver gespeichert werden. Wenn der Benutzer dann bestimmte Seiten anzeigt, wird dem Benutzer das Skript zur Verfügung gestellt. Refreive XSS -Angriffe dagegen beinhalten die Injektion eines Skripts durch eine URL- oder Formulareingabe, die der Server sofort in die Antwort zurückgibt und durch den Browser des Benutzers ausgeführt wird.
PHP bietet einige integrierte Funktionen, mit denen XSS-Angriffe verhindern können. Beispielsweise kann die htmlspecialchars()
-Funktion verwendet werden, um Sonderzeichen in Benutzereingaben zu codieren, wodurch potenzielle Skripte harmlos werden. filter_input()
Funktionen können verwendet werden, um die Benutzereingaben, löschen oder codieren schädliche Zeichen zu beseitigen.
httponly cookie ist ein Cookie, auf das nicht über Client -Skripte zugegriffen werden kann. Dies bedeutet, dass ein Angreifer selbst, wenn er ein Skript in Ihre Webseite injizieren kann, das Skript nicht verwenden kann, um HTTPonly -Cookies zu lesen oder zu ändern. Dies kann dazu beitragen, sensible Informationen (z. B. Sitzungskennungen) vor XSS -Angriffen vor gestohlenen Angriffen zu schützen.
Ja, XSS-Angriffe können verwendet werden, um den Schutz der CSRF (Cross-Site Request Forgery) zu umgehen. Wenn ein Angreifer ein Skript in Ihre Webseite injizieren kann, kann er es verwenden, um Aktionen im Namen des Benutzers auszuführen und möglicherweise alle von Ihnen implementierten CSRF -Schutzmaßnahmen umzugehen. Aus diesem Grund ist es wichtig, sowohl vor XSS- als auch vor CSRF -Angriffen zu schützen.
Ja, viele PHP-Frameworks bieten einen integrierten Schutz gegen XSS-Angriffe. Beispielsweise codiert Laravel automatisch die Ausgabe, um XSS -Angriffe zu verhindern. Andere Frameworks wie Symfony und Codesigniter bieten auch Funktionen für die Reinigung von Benutzereingaben und codierten Ausgaben. Es muss jedoch daran erinnert werden, dass kein Rahmen einen vollständigen Schutz bieten kann, und Sie sollten weiterhin bewährte Verfahren zur Verhinderung von XSS -Angriffen befolgen.
Das obige ist der detaillierte Inhalt vonCross-Site-Skriptangriffe (XSS). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!