Heim > Backend-Entwicklung > PHP-Tutorial > Cross-Site-Skriptangriffe (XSS)

Cross-Site-Skriptangriffe (XSS)

William Shakespeare
Freigeben: 2025-02-27 09:12:10
Original
520 Leute haben es durchsucht

Cross-Site Scripting Attacks (XSS)

Schlüsselpunkte

  • Cross-Site-Skriptangriff (XSS) ist ein gängiger Code-Injektionsangriff, der aufgrund einer unsachgemäßen Überprüfung der Benutzerdaten auftritt (normalerweise Einfügen oder Manipulation von Hyperlinks über Webformen). Auf diese Weise kann der schädliche Client -Code auf dem Server gespeichert oder im Browser des Benutzers ausgeführt werden.
  • XSS-Angriffe können in zwei Typen unterteilt werden: nicht-persistentes XSS (bösartiger Code wird durch den Server weitergegeben und dem Opfer präsentiert) und persistierende XSS (schädlicher Code umgeht die Überprüfung und wird im Datenspeicher der Website gespeichert und wird ausgeführt, wenn Informationen auf der Website angezeigt werden).
  • Verhinderung von XSS-Angriffen erfordert, dass Sie keine Daten von Benutzern oder Quellen von Drittanbietern vertrauen, alle Daten bei der Eingabe überprüfen und sie bei der Ausgabe entziehen. Dies beinhaltet die Implementierung der Datenüberprüfung, die Datenreinigung und die Ausgabe von Ausgangsmessungen.
  • Während viele PHP-Frameworks integrierte Sicherheitsmaßnahmen liefern, ist es entscheidend, den Validierungscode mit den neuesten XSS-Testvektoren kontinuierlich zu testen, um sicherzustellen, dass der Code von XSS-Angriffen nicht beeinflusst wird.

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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"]; ?>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ohne Filterung kann der Hacker Folgendes über das Formular einreichen, wodurch ein Popup im Browser mit der Nachricht "gehackt" generiert wird.

alert("hacked")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

nicht-persistentes XSS

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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"]; ?>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es ist keine Überprüfung erforderlich, die Seite enthält:

alert("hacked")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Permanence XSS

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"];

// 列出搜索结果
...
Nach dem Login kopieren
Nach dem Login kopieren

Andere Orte, der Inhalt von comments.txt wird dem Besucher angezeigt:

http://example.com/search.php?query=alert(&quot;hacked&quot;)
Nach dem Login kopieren
Nach dem Login kopieren

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

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Datenreinigung

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"]; ?>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Manchmal können die Datenüberprüfung und Reinigung/Normalisierung gleichzeitig durchgeführt werden.

alert("hacked")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabebereich

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"];

// 列出搜索结果
...
Nach dem Login kopieren
Nach dem Login kopieren

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(&quot;hacked&quot;)
Nach dem Login kopieren
Nach dem Login kopieren

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.

  • rsnake XSS -Cheatsblatt (eine ziemlich umfassende Liste von XSS -Vektoren, mit denen Sie Ihren Code testen können)
  • Zend Frameworks XSS -Testdaten
  • xss Cheatsheet (mithilfe von HTML5 -Funktionen)

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)

Welche Auswirkungen haben Cross-Site-Skriptangriffe (XSS) auf PHP-Anwendungen?

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.

Wie identifizieren Sie potenzielle XSS -Schwachstellen in meiner PHP -Anwendung?

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.

Welche gängigen Methoden werden bei XSS -Angriffen verwendet?

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.

Wie können XSS -Angriffe in meiner PHP -Anwendung verhindern?

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.

Welche Rolle spielt Richtlinien für die Sicherheit von Inhalten bei der Verhinderung von XSS -Angriffen?

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.

Was ist der Unterschied zwischen einem Speicher -XSS -Angriff und einem reflektierenden XSS -Angriff?

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.

So verwenden Sie die integrierten Funktionen von PHP, um XSS-Angriffe zu verhindern?

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.

Welche Rolle spielt Httponly Cookies bei der Verhinderung von XSS -Angriffen?

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.

Können XSS -Angriffe verwendet werden, um den CSRF -Schutz zu umgehen?

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.

Welche PHP-Frameworks bieten einen integrierten Schutz gegen XSS-Angriffe?

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage