XSS - Was ist das und wie kann ich mich schützen?Pfeil zurück

XSS - Was ist das und wie kann ich mich schützen?

Julia
Julia
Oktober 2022
Tech Knowhow

XSS - Was’n das?

XSS steht für Cross Site Scripting. Dies ist im Grunde eine Art Attacke, mit der Angreifer versuchen, ihren eigenen Code auf einem anderen System auszuführen. Ziel dieses Angriffs ist oft der Endnutzer der Website selbst inklusive seiner Daten - also Du! Wenn Du jetzt denkst “Gut, meine Daten hat doch eh schon jeder, oder? Ich akzeptiere ja auf tausenden von Seiten die Cookie-Policy!”, dann leider falsch gedacht. Bei XSS - Angriffen können auch sensible Informationen wie Nutzername und Passwort aufgedeckt werden, die zu Identitätsdiebstahl führen können. Es ist also definitiv sinnvoll, hier dem Angreifer keine Chance zu lassen!

Und falls du dich gefragt hast, wofür das “X” von XSS in Cross Site Scripting steht: Das englische Wort Cross lässt sich im Deutschen zu “Kreuz” übersetzen, welches das X quasi bildlich symbolisieren soll.

Wie genau funktionieren XSS Attacken?

Generell unterscheidet man zwischen drei verschiedenen Arten von XSS-Attacken: Die  reflektierte, die persistente und die DOM-basierte Methode. Bei allen Methoden kommt es jedoch darauf an, dass die Webanwendung oder der dahinterliegende Server Daten von Nutzern annimmt und diese an den Browser weiterleitet, ohne diese vorher genau zu prüfen. Kann ein Nutzer auf einer Website z.B nach einem bestimmten Produkt suchen, und gibt in die Suchleiste stattdessen

ein, so wird bei gut entwickelten Websiten die Eingabe geprüft und Script-Tags werden generell nicht ausgeführt. Prüft eine Website die Eingabe jedoch nicht, und gibt den Suchbegriff wieder aus, so wird folgender alert-Popup auf der Seite angezeigt:

Dies ist selbstverständlich eine sehr grundlegende Art, um die Funktionsweise von XSS-Attacken zu verdeutlichen. Ein Pop-Up Fenster schadet in der Regel niemandem. Auf dieselbe Weise können Cyberkriminelle allerdings auch versuchen, anderen Javascript-Code einzuschleusen. Dieser zielt meist darauf ab, geheime Informationen offenzulegen oder Malware auf dem eigenen Rechner der Besucher zu installieren.

Reflektierte Angriffe

Bei reflektierten Angriffen werden Eingaben vom Nutzer vom Server wieder an den Browser zurückgegeben, also reflektiert. Das oben beschriebene Beispiel ist ein reflektierter Angriff. Wichtig dafür ist, dass der Suchbegriff von der Seite erneut angezeigt (reflektiert) wird, z.B. so:

Würde man hier also das alert-Beispiel von oben eingeben, so hat man es als Nutzer geschafft, seinen eigenen Code vom Browser ausführen zu lassen. Dieser Angriff wird auch als nicht-persistent beschrieben, da der Schadcode bei einem erneuten Aufruf oder bei einem anderen Suchbegriff wieder verloren geht.

Persistente Angriffe

Bei persistenten Angriffen wird der Schadcode dauerhaft auf dem Server der Website gespeichert. Ein Beispiel hierfür z.B eine Website sein, auf der Nutzer ihre Lieblingsrezepte hochladen können, oder ganz einfach auch eine Kommentarspalte. Gibt hier ein Nutzer Schadcode ein, wie z.B das alert-Beispiel, und die Webseite prüft oder filtert dies nicht, so wird der Code bei jedem Aufruf der Seite durch weitere Besucher angezeigt und somit auch ausgeführt.

DOM-basierte Angriffe

Bei DOM-basierten Angriffen ist die Webanwendung, die auf einem Server liegt, gar nicht direkt beteiligt. Der kompromittierende Code wird dafür direkt an ein clientseitiges Skript übergeben. Dies könnte z.B der Fall sein, wenn du eine URL aufrufst, die vom Angreifer manipuliert wurde. Oft werden Parameter mit der URL übergeben, z.B. bei Pagination oder bei Filtern. Dies könnte in etwa so aussehen:

http://bizfactory.tech/testsite.html?page=<Seitenanzahl>

Eine vom Angreifer manipulierte URL könnte an Stelle der <Seitenzahl> eine Code, wie z.B das alert-Script beinhalten. Wird der Parameter auf der Seite ohne vorherige Prüfung angezeigt, so wird der Code des Angreifers ausgeführt. Für diesen Angriff ist also der Aufruf einer manipulierten URL zwingend notwendig.

Wie kann man das verhindern?

Die traditionellen XSS-Angriffe werden mit Javascript ausgeführt. Diese können verhindert werden, indem man dem Browser generell untersagt, Javascript-Code auszuführen. Dies ist z.B in Chrome unter chrome://settings/content/javascript möglich. Der große Nachteil an dieser Option ist jedoch, dass viele Website Javascript einsetzen, um dem Nutzer Inhalte zu präsentieren oder um die UX-Erfahrung allgemein zu verbessern. Deaktiviert man Javascript generell im Browser, so können diese sinnvollen Funktionen auch nicht mehr ausgeführt werden. 

Eine etwas elegantere Option ist die Verwendung von Plugins, die sich um die Sicherheit in deinem Browser kümmern, wie z.B NoScript. Diese Plugins prüfen alle Art von aktiven Inhalte und fragen den Nutzer aktiv, ob eine Website als vertrauenswürdig eingestuft werden soll, bevor Inhalte geladen werden. Dies ist eine gute Option, um sich vor einer Vielzahl von Angriffen zu schützen.