2009-01-15 11 views
9

Nehmen wir an, ich habe eine einfache ASP.NET MVC Blog-Anwendung und ich möchte den Lesern erlauben, Kommentare zu einem Blog-Post hinzuzufügen. Wenn ich jede Art von XSS-Spielereien verhindern möchte, könnte ich alle Kommentare HTML-kodieren, so dass sie beim Rendern unschädlich werden. Was aber, wenn ich wollte einige grundlegende Funktionalität wie Hyperlinks, Fettdruck, Kursivschrift, etc?Verhindern von XSS (Cross-Site Scripting)

Ich weiß, dass die Stackoverflow WMD Markdown Editor verwendet, die wie eine große Auswahl scheint für das, was ich versuche, um die Tatsache zu erreichen, wenn nicht, dass es unterstützt sowohl HTML und Abschriften der leaves it open to XSS attacks.

+1

Für die Suche Gründen kann es hilfreich sein, um den Titel zu ändern, um „Verhindern, dass XSS (Cross- Site Scripting) "zum Titel. Für jemanden, der seinen freundlichen Namen, XSS, nicht kennt, fällt es ihm vielleicht schwerer, diesen Thread zu finden. – BuddyJoe

Antwort

3

Wie viel HTML werden Sie unterstützen? Nur fett/kursiv/das Grundlegende? In diesem Fall können Sie diese in die Markdown-Syntax konvertieren und dann den Rest des HTML-Codes entfernen.

Das Entfernen muss serverseitig erfolgen, bevor Sie es speichern. Sie müssen auch die Eingabe auf dem Server überprüfen, wenn Sie nach SQL-Schwachstellen und anderen unerwünschten Dingen suchen.

+0

Direkt an. Nehmen Sie eine Whitelist-Herangehensweise - keine Black-List-Herangehensweise. –

1

Ich würde vorschlagen, dass Sie nur die Markdown-Syntax übermitteln. Auf dem Frontend kann der Client Markdown schreiben und eine HTML-Vorschau (wie SO) haben, aber die Markdown-Syntax nur serverseitig übermitteln. Dann können Sie es validieren, den HTML-Code erzeugen, ihn entziffern und speichern.

Ich glaube, das ist die Art, wie die meisten von uns es tun. In jedem Fall ist Abzählen da, um jemanden davon abzuhalten, strukturierten HTML-Code zu schreiben, und denen, die nicht einmal wissen, wie man das macht.

Wenn es etwas Bestimmtes gibt, was Sie mit dem HTML machen möchten, dann können Sie es mit etwas CSS-Vererbung 'optimieren.' Cment a {color: # F0F; } ', Front-End-JS oder einfach über den generierten HTML-Code durch Parsing Markdown, bevor Sie es speichern.

0

Sie können eine HTML-Whitelist verwenden, damit bestimmte Tags weiterhin verwendet werden können, aber alles andere ist blockiert.

Es gibt Tools, die dies für Sie tun können. SO verwendet the code, dass Slough linked.

1

Ich würde für die wählen, aber Sie müssen einige extra steps zu der zurückgegebenen Ausgabe too.

2

Wenn Sie es im Browser tun müssen: http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

+0

Sie können nie Benutzereingaben vertrauen, alles, was vom Browser kommt, könnte manipuliert werden – rjlopes

+0

@rjlopes - Das ist kein Problem, wenn Sie versuchen, Inhalt von einem Server für die Präsentation im Client zu bereinigen. –

+0

meine Schuld ging ich davon aus, dass es auf dem Client vor der Übermittlung der Informationen an den Server gelten sollte.In diesem speziellen Fall (Sie steuern den Server) macht es jedoch wenig Sinn, auf dem Client zu bereinigen. Der einzige Fall, den es nützlich sein sollte, ist, wenn Sie Anfragen an Websites von Drittanbietern AJAX. – rjlopes

Verwandte Themen