Was ist Cross-Site-Scripting?

click fraud protection

Eine der häufigsten Sicherheitslückenklassen in Websites wird „Cross-Site Scripting“ oder „XSS“ genannt. Bei XSS-Schwachstellen ist es einem Benutzer möglich, die Ausführung von JavaScript zu veranlassen. Es gibt verschiedene Varianten der XSS-Sicherheitslücke mit unterschiedlichen Schweregraden.

Das Problem, dass ein Angreifer JavaScript in den Sitzungen anderer Benutzer ausführen kann, besteht darin, dass der Angreifer dann alles mit der Website machen kann, die das Opfer sieht. Dazu gehören die Weiterleitung von Opfern auf externe Websites, der Diebstahl von Authentifizierungstoken und die Überwachung von Zahlungsdetails.

Die schwerwiegendste Form der XSS-Sicherheitslücke ist „Stored“ oder „Persistent“ Cross-Site Scripting Es ist einem Angreifer möglich, eine XSS-Nutzlast zu erstellen und diese dann zu übermitteln, sodass sie in der Datenbank gespeichert wird. Mit einem in der Datenbank gespeicherten XSS-Exploit ist es dann möglich, über einen weiten Zeitraum andere Benutzer zu beeinflussen.

Eine andere Form von Cross-Site Scripting ist „Reflected“, dieser Typ wird an keiner Stelle gespeichert, sondern die Payload wird in den Browser eingebunden. Normalerweise ist diese Art von XSS Teil von Phishing-Angriffen, bei denen ein Angreifer versucht, ein Opfer dazu zu bringen, auf einen schädlichen Link zu klicken.

Im Allgemeinen wird die Nutzlast bei den meisten XSS-Angriffen irgendwann an den Server gesendet, aber einige Angriffe sind rein clientseitig, nie an den Server gesendet, sondern nur clientseitig betroffen JavaScript. Dies wird als DOM-basiertes XSS bezeichnet, da es im JavaScript Document Object Model oder DOM verbleibt. Diese Art von Schwachstelle ist besonders schwer zu identifizieren und zu beheben, da die Exploits vom Server nie gesehen werden und daher nicht protokolliert werden können.

Historisch gesehen besteht die Präventionstechnik gegen XSS-Schwachstellen darin, alle von Benutzern übermittelten Daten zu filtern, indem Blocklisten verwendet werden, um alle Nachrichten mit aussagekräftigen Zeichen oder Wörtern in JavaScript abzulehnen. Dies führte tendenziell zu einem Wettrüsten bei der Suche nach Umgehungen für den Filter und verhinderte gleichzeitig einige legitime Benutzereingaben. Die richtige Lösung besteht darin, HTML-Entitäten zu verwenden, um vom Benutzer übermittelte Daten zu codieren. mit aktivierten HTML-Entity-Modulen werden Zeichen automatisch in ein Format codiert, in dem der Browser sie als die richtigen Symbole anzeigen, aber nicht als Code behandeln kann.