17.3 Cross-Site-Scripting XSS
Schadhafter Code wird eingeschleust
Mit Cross-Site-Scripting wird eine Angriffsform bezeichnet, die versucht, schadhaften Code (HTML, CSS, JacaScript, XML), der clientseitig ausgeführt wird, in eine Website einzuschleusen und im vertrauenswürdigen Kontext der Website auszuführen.
Der Angreifer sendet dazu entsprechend präparierten HTML-Code an eine Applikation, die diesen speichert. Bei späteren Anfragen anderer Benutzer wird der schadhafte Code an die Anfragen angehängt, ohne ihn zu maskieren. JavaScript in Verbindung mit HTML ist die meistverwendete Script-Sprache für diese Angriffsform.
Ziel: Identitätsdiebstahl
Ziel dieser Angriffe ist es meistens, Cookies mit Benutzerdaten auszuspähen, um zum Beispiel Benutzerkonten zu übernehmen (Identitätsdiebstahl). Das heißt, betroffen sind vor allem Websites, die Benutzerdaten an eine Datenbank senden, z. B. über Anmeldeformulare oder Formulare zur Anforderung vergessener Passwörter.
Hinweis |
Cross-Site-Scripting wird häufig mit CSS abgekürzt. Da es dabei zu Verwechslungen mit der Abkürzung für Cascading Stylesheets kommen kann, wird empfohlen, die Abkürzung XSS für Cross-Site-Scripting zu verwenden. |
Ausgabe ungepüfter Benutzereingaben
Möglich ist ein Cross-Site-Scripting-Angriff immer dann, wenn Benutzereingaben ungeprüft und ohne Maskierung der Metazeichen an der Oberfläche ausgegeben werden. Wenn eine Benutzereingabe in einem solchen Fall also JavaScript-Befehle enthielte, würden diese ausgeführt:
<%= @params['text'] %>
Wenn der Parameter text z. B. den folgenden JavaScript-Code enhielte,
<script>alert(document.cookie)</script>
würde der Inhalts des Cockies der Seite angezeigt.
Wie Sie Ihre Applikation vor einem XSS-Angriff schützen
Risiko minimieren
Das Risiko, einem XSS-Angriff ausgesetzt zu werden, können Sie minimieren, indem Sie konsequent alle HTML-Metazeichen in Benutzereingaben oder Variablen, die Sie an der Oberfläche ausgeben, in HTML-Entities umwandeln, bevor Sie sie ausgeben. Dazu stellt Rails die Methode escape_html() bzw. ihren Alias h() zur Verfügung:
<%=h @params['text'] %>
Sicherheitslücken geschlossen
Darüber hinaus wurden ab Rails 2 die Sicherheitslücken in den Methoden sanitize, strip_tags und strip_links geschlossen, so dass Sie diese auch zur Verhinderung eines XSS-Angriffs einsetzen können.
Mehr zu diesen Methode, erfahren Sie im Abschnitt 8.3.6.
Safe ERB
Das Plug-in Safe ERB ( http://railsbuch.de/urls/4 ) überprüft, ob wirklich alle Ausgaben in Ihren ERB-Templates innerhalb von <%= %> mit der Methode h escaped wurden. Wenn nicht, kommt es zu einem Fehler.
Whitelist
Arbeiten Sie nicht mit einer Blacklist, um schadhaften Code auszuschliessen, sondern immer mit einer Whitelist, die prinzipiell alles ausschließt, außer den definierten Ausnahmen. Nutzen Sie dazu das Plug-in WhiteListHelper ( http://railsbuch.de/urls/7 ).
BlueCloth und RedCloth
Zur Textformatierung nutzen Sie am besten BlueCloth oder RedCloth (siehe Abschnitt 8.3.5) in Verbindung mit dem WhiteListHelper.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.