Cross-site scripting/de

Cross-Site Scripting, XSS oder arbitrary JavaScript injection ist eine Art von Computersicherheitslücken, die typischerweise in Webseiten vorkommen und es dem Angreifer ermöglichen, benutzerseitigen Programmcode in Webseiten einzufügen, die von anderen Benutzern besucht werden.

Für Informationen über Cross-Site Scripting auf der Clientseite und wie es verhindert werden kann siehe DOM-basiertes XSS.

Beispiele
Beispiele für Cross-Site Scripting:


 * Der Angreifer bringt einen angemeldeten Benutzer dazu, eine speziell präparierte URL zu besuchen, oder eine Webseite, die der Angreifer kontrolliert und den Benutzer zu der präparierten URL weiterleitet.
 * Die URL zeigt auf deine Webseite und enthält JavaScript in eine String. Die Webseite fügt dieses gefährliche JavaScript, wegen mangelnder Maskierung, in die Seite ein und führt es bei dem Benutzer aus.
 * Das JavaScript hat vollen Zugriff auf die Benutzer Cookies. Es kann die Webseite beliebig verändern und im Namen des Benutzers Formulare ausfüllen und absenden. Das Risiko ist besonders hoch, wenn die Zielperson ein Administrator ist.

Siehe auch: Exploit examples auf Wikipedia für mehr Beispiele.

Beispiel:

Der Angreifer sendet dem Opfer eine URL wie:

POST requests sind auch anfällig, für auf anderen Servern gespeichertes JavaScript.

Opfer müssen dann nicht mal direkt die infizierte Webseite öffnen. Es reicht, wenn die schädliche Webseite mit einem iframe in eine vertrauenswürdige Seite eingefügt wird. Durch URL-Verkürzer kann der manipulierte Link verschleiert werden.

Cross-Site Scripting verhindern
Um Cross-Site Scripting zu verhindern, muss Folgendes gemacht werden:


 * Überprüfe die Eingaben
 * Maskiere die Ausgaben

Du kannst die Überprüfung überspringen, aber du kannst NIEMALS die Maskierung auslassen. Maskiere alles.

Es macht nichts, wenn Verschleierung und Überprüfung vorhanden ist, der Performanceverlust ist sehr gering im Vergleich zu der Sicherheit der Webseite. Maskierung ist auch dann wichtig, wenn die Daten von einem vertrauenswürdigen Absender kommen, die Maskierung gibt Sicherheit.

Maskiere so nah wie möglich an der Ausgabe, so kann man beim Überprüfen einfach festellen, dass die Ausgabe maskiert wurde.

Die Makierung von Ausgaben ist Kontext abhängig. Also überprüfe auch nach HTML entity,URL; JavaScript usw.

Das OWASP Abridged XSS Prevention Cheat Sheet ist eine hilfreiche und aktuelle Referenz, um XSS zu verhindern.

Dies gilt für alle Textformate, wir konzentrieren uns auf HTML, da Webanwendungen sehr viel davon produzieren und Attacken häufig vorkommen. Aber jedes Textformat sollte makiert werden.

Hier sind einige bequeme Funktionen, die HTML maskieren.

MediaWiki maskierte Ausgaben
MediaWiki hat auch einige elegante Funktionen, die Ausgaben maskieren.Für SQL benutzt du die 'key' => 'value' Syntax für bedingungslos maskierte Ausgaben. Die Html:: und Xml:: Methoden maskieren Attribute, und je nach Methode werden auch Text Werte maskiert.

Externe Links

 * Escaping, w3.org. Eine sehr gut geschriebene Definition des Themas.