![]() |
|
URL dieser Newsmeldung:
26.06.2008
About Security #161: Schwachstellensuche: XSS verhindernWerden Cross-Site-Scripting-Schwachstellen (wie in About Security #158, #159 und #160 beschrieben) gefunden, müssen die natürlich behoben werden. Dazu müssen alle Eingaben vor ihrer Verwendung geprüft und ggf. verworfen oder gefiltert werden. Die entsprechenden Funktionen müssen nur einmal implementiert werden und können dann auf alle betroffenen Parameter angewendet werden. Worauf Sie dabei achten müssen, erfahren Sie in dieser Folge. Einfach, aber nicht unbedingt sicher: Gefährliche Zeichen filtern
Die einfachste Lösung ist das rigorose Ausfiltern der potenziell
gefährlichen Zeichen wie <, >, ", ', / und :. Soll die
Eingabe von HTML-Code, z.B. Auszeichnungs- oder
Formatierungsanweisungen,
möglich sein, kann stattdessen z.B. BBCode
verwendet werden. Für fett gedruckten Text wird dann statt der
HTML-Anweisung N E U ! Security
aktuell Schwieriger, aber nicht zwingend sicherer: Komplette Tags filternEin weiterer Ansatz zum Prüfen und Filtern der Eingaben ist das Ausfiltern kompletter Tags anhand von Negativlisten. Damit wirklich kein Schadcode eingeschleust werden kann, müssen dabei alle möglicherweise gefährlichen Tags und alle möglichen Tarnungen dieser Tags erfasst werden. Naturgemäß kann so eine Liste nie vollständig sein. Wenn man denkt, alle möglichen Tags und deren Variationen und Kombinationen gefunden zu haben, findet bestimmt irgendjemand eine neue Methode, funktionsfähigen Code an der Negativliste vorbeizuschleusen. Der beste Ansatz: Nur Erwünschtes durchlassenAllgemein besser, da einfacher zu warten, ist eine Positivliste aller zulässigen Eingaben. Wenn HTML erlaubt ist, dürfen nur korrekt formatierte Tags akzeptiert werden. Alles, was nicht wohlgeformt ist, könnte in irgendeinem Webbrowser zu unerwünschte Reaktionen führen.
Was nicht auf der Positivliste steht, wird zurückgewiesen oder
verworfen. Wobei sich über die Frage, ob die Eingabe kommentarlos
verworfen oder mit einer Fehlermeldung abgelehnt wird, streiten lässt.
Für beides gibt es gute Gründe: Eine ausführliche
Fehlermeldung hilft dem Benutzer, das unerwünschte Zeichen aus seiner
Eingabe zu entfernen. Möchte er "Hier ist a<b"
eingeben und die Eingabe wird wegen des <-Zeichens nicht
akzeptiert,
kann er das Zeichen ausschreiben und "Hier ist a kleiner als
b" erfolgreich eingeben. Ein Angreifer erfährt durch die
gleiche Fehlermeldung aber, woran sein Angriff bei diesem Versuch
gescheitert ist und kann daraus eventuell Schlüsse für weitere
mögliche Variationen ziehen. Mein Rat ist in diesem Fall, der
Benutzerfreundlichkeit den Vorzug zu geben. Ein Angreifer lässt sich
von einer allgemeinen Meldung wie z.B. Eingaben vorbereitenIm Folgenden wird davon ausgegangen, dass mit einer Negativliste gearbeitet wird. Beim Einsatz eine Positivliste erübrigt sich die Vorbereitung der Eingabe: Entweder wird sie ohne Änderung akzeptiert, oder sie wird gar nicht akzeptiert. Wie Sie in About Security #160 gesehen haben, können Filter in manchen Fällen durch ungewöhnliche Schreibweisen oder Formatierungen überlistet werden. Entsprechend sorgfältig müssen die Eingaben auf die Prüfung vorbereitet werden: Die Eingaben müssen in den passenden Zeichensatz (Charset) umgewandelt und Groß- und Kleinschreibung vereinheitlicht werden. Überflüssige Whitespace-Zeichen (normale Leerzeichen, Tabulator-Zeichen, Nullbytes etc.) müssen entfernt und die verbleibenden in ein einheitliches Zeichen umgewandelt werden. Erst wenn die Eingaben derartig vereinheitlicht wurden, können sie mit der Negativliste verglichen werden. Weitere NegativbeispieleZum Abschluss noch einige weitere Beispiele, wie ein Angreifer nachlässig programmierte Schutzfunktionen umgehen kann:
Bisher ging es im Wesentlichen um reflektiertes Cross-Site Scripting. In der nächsten Folge geht es um die Suche nach persistenten und DOM-basierten Cross-Site-Scripting-Schwachstellen. Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen! About Security – Übersicht zum aktuellen Thema "Schwachstellensuche – III. Angriffe über vom Benutzer gelieferte Daten: XSS"
[rl] |
||
|