Cross-Site Scripting

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Cross-site scripting and the translation is 97% complete.
Other languages:
Deutsch • ‎English • ‎dansk • ‎español • ‎français • ‎italiano • ‎русский • ‎中文 • ‎日本語
shortcut: XSS

Cross-Site Scripting, XSS oder arbitrary JavaScript injection ist eine Art von Computersicherheits Problemen, die typischerweise in Webseiten vorkommen, die es dem Angreifer ermöglichen, Benutzerseitigen Programmcodein Webseiten einzufügen, die von anderen Benutzern besucht werden.

For information about cross-site scripting on the client-side, and how to prevent it, see DOM-based 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.

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

Beispiel:

function getTableCell( $out, $value ) {
    $request = $out->getRequest();
    $class = $request->getVal( 'class' );
    return "<td class='$class'>" . htmlspecialchars( $value ) . '</td>';
}

Der Angreifer sendet dem Opfer eine URL wie:

http://example.com/wiki/SomePage?class='%20><script>hack();</script></td><td%20class='

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 machen, 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.

Format Maskier Funktion Hinweise
HTML htmlspecialchars( $string, ENT_QUOTES ) Benutze immer das ENT_QUOTES flag das doppelte und einfache Anführungszeichen konvertiert. PHP maskiert standartmäßig nur einfache Anführungszeichen.[1]
XML ID Sanitizer::escapeId() Für id Attribute in HTML
Style Sanitizer::checkCss() Für style Attribute in HTML
JavaScript FormatJson::encode(), Xml::encodeJsVar()
URL Parameter wfArrayToCgi(), urlencode()
SQL $db->addQuotes()

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.

Einzelnachweise