Sichere Websites mit den OWASP Top 10: Cross-Site Scripting (XSS)

Wenn Sie heute eine Website veröffentlichen, vergehen kaum ein paar Minuten, bis sie das erste Mal angegriffen werden. Diese Artikelserie beschäftigt sich mit den OWASP Top 10, den zehn meisten Sicherheitsrisiken, und gibt Tipps, wie sie sich und ihre Produkte schützen können.

Diese Serie besteht aus den folgenden Artikeln:

Cross-Site Scripting (XSS)

Auf Platz 3 der OWASP Top 10 ist Cross-Site Scripting (XSS). Unter XSS versteht man das Einschleusen von Javascript in eine Webseite. Das Ziel ist meistens, die Session eines anderen Benutzers zu übernehmen.

Es gibt verschiedene Wege, Javascript in eine Webseite einzuschleusen. Eine sehr einfache Möglichkeit ist das Manipulieren von URLs. Auch

Glücklicherweise kann man sich gegen XSS Attacken wehren. Dazu müssen grundsätzlich sämtliche Benutzereingaben validiert werden. Überall dort, wo ein Benutzer einen Text eingeben kann, muss man mit XSS rechnen. Viele Benutzereingaben können Sie mit einfachen Regulären Ausdrücken validieren. Eingaben für E-Mail Adressen und Geburtstage etc. beinhalten eine sehr überschaubare Anzahl Sonderzeichen. Bei Namen wird es schon etwas komplizierter, aber auch das ist machbar.

Duch Clientseitige Validierung können Sie einem Benutzer sehr schnell ein Feedback geben, ob der Text, den er eingegeben hat, gültig ist. Diese Mechanismen kann man jedoch sehr einfach umgehen. Validieren Sie daher sämtliche Benutzereingaben (auch) auf dem Server.

Wenn Sie nicht explizit mit Quellcode rechnen, sondern nur normalen Texteingaben, encodieren Sie sämtliche Benutzereingaben. Aus einem <script>alert('xss!');</script> wird dann ein harmloses &lt;script&gt;alert('xss!');&lt;/script&gt;.

Je nach Verwendung des Textes müssen Sie Benutzereingaben unterschiedlich encodieren. Text in einer URL muss anders encodiert werden wie Text, der in HTML angezeigt wird. Wiederum anders in CSS oder JavaScript. Für gängige Programmiersprachen gibt es haufenweise Bibliotheken, auf die Sie für das Encodieren zurückgreifen können. Für die unterschiedlichen Einsatzzwecke stellen diese Bibliotheken dann jeweils andere Methoden zur Verfügung.

Um zu verhindern, dass ihr Session Cookie durch JavaScript ausgelesen werden kann, setzen Sie das "HTTP only" Flag. Sämtliche Cookies, die dieses Flag gesetzt haben, sind vor dem Auslesen durch JavaScript geschützt.

Ist Ihre Anwendung sicher? Nebst der in diesem Blog beschriebenen Möglichkeiten gibt es viele weitere Strategien, sich gegen Angreifer zu verteidigen. Gerne beraten ich Sie in Sicherheitsfragen oder führe ein Security Review in Ihrem Projekt durch. Kontaktieren Sie mich unverbindlich, um Ihre dringlichsten Fragen zu besprechen.

Software Entwickler / Architekt bei der Noser Engineering AG in Winterthur mit technologischem Schwerpunkt auf .NET und Azure. Beschäftigt sich mit Software Architekturen und Informationssicherheit.