XSS/Cross-Site-Scripting unterbinden und Sicherheitslücken schließen

Mit Cross-Site-Scripting – kurz XSS – wird das Ausnutzen von Sicherheitslücken in Webanwendungen bezeichnet. Schädliche Skripte werden dabei in einen vertrauenswürdigen Kontext eingespeist, aus dem heraus sie das System der Nutzer angreifen können. Skripte sind Programme, die mit Skriptsprachen wie JavaScript und hauptsächlich als Quelltextdatei programmiert werden. Bei harmlosen Varianten handelt es sich beispielsweise um aufpoppende Willkommensgrüße, die lediglich etwas lästig sind. Im schlimmsten Fall erlangen Angreifer mithilfe solcher Skripte aber auch vertrauliche Informationen oder Zugriff auf den Computer des geschädigten Users.

Die Gefahr des Cross-Site-Scriptings besteht immer dann, wenn die jeweilige Webanwendung Benutzerdaten ohne Überprüfung an den Webbrowser weiterleitet. Über sogenannte XSS-Löcher gelangen die schädlichen Skripte zu den betroffenen Clients. Dort manipulieren diese Anwendungen beispielsweise serverseitige Skripte wie Formulare zur Benutzeranmeldung. Während für den User alles nach einem verschlüsselten und anonymen Anmeldevorgang aussieht, werden die Daten in Wahrheit ungefiltert weitergegeben.

Nicht alle XSS-Angriffe zielen allerdings darauf ab, sensible Daten zu stehlen bzw. dem betroffenen Client direkt zu schaden. Ebenso verbreitet sind Skripte, die den jeweiligen Client als Initiator von Phishing- und Malware-Angriffen zweckentfremden oder den Inhalt der Website negativ verändern – die eigentlichen Verursacher bleiben dabei meist anonym.

Cross-Site-Scripting Beispiele: Welche Arten von XSS-Angriffen gibt es?

Um zu veranschaulichen, was Cross-Site-Scripting konkret für Website-Betreiber und -Besucher bedeutet, folgt eine kurze Auflistung und Erläuterung der unterschiedlichen Arten von XSS.

Reflektiertes Cross-Site-Scripting/XSS

Über das Aufrufen einer manipulierten URL oder das Absenden eines präparierten Formulars wird das schädliche Skript an den Webserver gesendet, der es ohne Überprüfung wieder an den Client zurückgibt. Der Schadcode wird nicht auf dem Server gespeichert und existiert nur temporär bei der Erzeugung der Website durch den geschädigten Client. Beliebte Angriffsziele sind dynamische Websites oder Mail-Anwendungen.

Beispiel: Bei dieser XSS-Variante bringt der Angreifer sein Skript in einem präparierten Link unter. Im Anschluss versucht er den Link – bevorzugt über E-Mails – weiterzuleiten. Der enthaltene Schadcode wird nur ausgelöst, wenn der Benutzer den erhaltenen Link aufruft. Tut er dies, wird ihm beispielsweise ein imitierter Anmeldebildschirm seines Online-Bankings präsentiert. Anstatt die eingegebenen Daten an den Webserver der Bank zu senden, sorgt das Skript jedoch für eine Umleitung auf die Adresse, die der Angreifer zuvor bestimmt hat.

Persistentes Cross-Site-Scripting/XSS

Beim persistenten bzw. beständigen XSS werden die schädlichen Skripte auf dem Webserver gespeichert und bei jedem Aufruf durch einen Client ausgeliefert. Zu diesem Zweck werden solche Webanwendungen für den Angriff ausgewählt, die Benutzerdaten serverseitig speichern und anschließend ohne Überprüfung oder Codierung ausgeben. Besonders anfällig für diese Scripting-Art sind Blogs und Foren.

Beispiel: In einem Forum werden von Usern geschriebene Beiträge in einer Datenbank gespeichert. Dabei werden diese oftmals weder überprüft noch verschlüsselt hinterlegt. Diese Chance machen sich die Angreifer zunutze und fügen einem ganz normalen Forenpost ihr schädliches Skript hinzu. Nichtsahnende User erhalten den jeweiligen Link zu dem Post per E-Mail oder gelangen zufällig zu dem entsprechenden Eintrag und führen das Skript mit dem Aufruf aus.

DOM-basiertes Cross-Site-Scripting/XSS

Diese Angriffsart wird auch lokales XSS genannt. Über das Aufrufen einer manipulierten URL wird der Schadcode durch eine Lücke in einem clientseitigen Skript ohne Überprüfung ausgeführt. Im Gegensatz zu persistentem und reflektiertem XSS ist der Webserver nicht an dem Prozess beteiligt. Entsprechend sind auch statische Websites, welche die jeweilige Skript-Sprache unterstützen, durch diese Scripting-Variante gefährdet.

Beispiel: Das DOM-basierte setzt wie das reflektierte Cross-Site-Scripting voraus, dass zunächst ein Link vom Benutzer geöffnet wird. Nach dem Öffnen des Links wird das enthaltene Skript direkt in ein clientseitiges Skript wie JavaScript integriert. Selbiges liest den Argumentwert der URL aus und startet dadurch die Website inklusive der schädlichen Anwendung.

So schützen Sie sich vor XSS-Angriffen

Die negativen Folgen, die Cross-Site-Scripting für Website-Nutzer und -Betreiber hat, sind nicht zu unterschätzen: Als User riskieren Sie den Verlust Ihrer Daten oder fungieren unbemerkt als unfreiwilliger Komplize der Angreifer. Als Website-Betreiber sind sie für die Daten Ihrer Kunden bzw. Besucher verantwortlich und können zudem direkt durch Angriffe getroffen werden: Schädliche Inhalte und Serverabstürze mindern die Besucherzahlen, und auf lange Sicht reagieren Suchmaschinen wie Google mit Abstrafungen und potentielle Kunden mit Misstrauen. Das führt letztlich auch zu finanziellen Einbußen. Daher sollten Sie als Website-Betreiber, aber auch als Nutzer unbedingt Maßnahmen einleiten, um Cross-Site-Scripting zu verhindern.

Schutzmaßnahmen für Internet-User

Die einfachste Möglichkeit, clientseitiges Cross-Site-Scripting zu verhindern, ist das Ausschalten der JavaScript-Unterstützung im Browser. Ist dieses sogenannte Active Scripting deaktiviert, haben DOM-basierte XSS, die auf JavaScript abzielen, keine Wirkung, da die schädliche Anwendung erst gar nicht gestartet wird. Für einige Browser existieren außerdem Add-ons, die Sie vor XSS-Angriffen schützen können. So gibt es für Mozilla Firefox beispielsweise die Erweiterung NoScript. In den Standardeinstellungen sind alle aktiven Inhalte von Websites, wie z. B. JavaScript, Java-Applets, Adobe Flash oder Microsoft Silverlight, automatisch gesperrt. Auf Wunsch können Sie die Blockierung temporär aufheben oder die jeweilige Seite auf die Whitelist setzen, wenn Sie sich sicher sind, dass jene zu 100 Prozent vertrauenswürdig ist. Ein letzter Tipp, den Sie nicht nur in Zusammenhang mit den Gefahren des Cross-Site-Scriptings unbedingt beherzigen sollten: Fremddaten wie Links sollten Sie stets skeptisch gegenüber sein und vor der Verwendung gründlich unter die Lupe nehmen.

Das können Sie als Website-Betreiber gegen XSS-Attacken unternehmen

Damit Ihre Webanwendungen keine Basis für XSS-Angriffe bieten, müssen Sie zunächst alle eingehenden Eingabewerte als unsicher betrachten. Bevor diese also vom Webserver in Empfang genommen werden, sollten sie entsprechend geprüft werden. Die sicherste Methode ist hier wieder – wie beim Browser-Add-on NoScript für Clients – das Anlegen einer Whitelist. Sofern es die Kapazitäten erlauben, die Eingaben auf Ihrer Website zu scannen und nur vertrauenswürdige Inhalte zuzulassen, erzeugen Sie auf diese Weise einen exzellenten Schutz gegen Cross-Site-Scripting.

Zusätzlich zu den Eingabedaten sollte allerdings auch die Datenausgabe abgesichert werden. Hierzu ist es notwendig, dass die problematischen HTML-Metazeichen durch entsprechende Zeichenreferenzen ersetzt werden; dadurch werden die Metazeichen als normale Zeichen gewertet und potenziell eingeschleuste Skripte können nicht gestartet werden. Die meisten Programmier- und Skriptsprachen wie Perl, JavaScript oder PHP besitzen zu diesem Zweck bereits vordefinierte Funktionen zur Zeichenersetzung bzw. -maskierung, die Sie bedenkenlos verwenden können.

Einfache XSS-Attacken wehren Sie außerdem durch den Einsatz von Web-Application-Firewalls ab.

Cross-Site-Scripting bildet oftmals nur die Vorstufe für schwerwiegendere Angriffe, die Sie mit einem umfassenden Schutz der ein- und ausgehenden Dateneingabe Ihres Webservers also schon in der Entstehung vereiteln können.

Sichern Sie sich Ihr SSL-Zertifikat
  • Verschlüsselt Webseiten-Kommunikation
  • Verhindert Sicherheits-Warnungen
  • Verbessert Google-Platzierung
War dieser Artikel hilfreich?
Page top