Json.encode spezielle Symbole \ u003c MVC3

8

Ich habe JavaScript-Anwendung, wo ich clientseitige Vorlagen (underscore.js, Backbone.js) verwenden.

Die Daten für das erste Laden der Seite sind wie folgt in die Seite eingebunden (.cshtml Razor-Datei):

%Vor%

Die Razor-Engine führt eine Escape-Operation aus, wenn also Model

ist %Vor%

, in der Ausgabe haben wir:

%Vor%

Was nach "parse" Operation:

%Vor%

Wir haben Objektdaten mit "Title" field genau "<script>alert('XSS');</script>" !

Wenn dies zur Unterstreichungsvorlage geht, wird eine Warnung ausgegeben.

Irgendwie werden \u003c- ähnliche Symbole wie richtige " < " Symbole behandelt.

Wie entkomme ich " < " Symbole in &lt; und &gt; von DB (wenn sie irgendwie dort angekommen sind)?

Vielleicht kann ich Json.Encode Serialisierung für das Ausschließen dieser Symbole einstellen? Vielleicht kann ich Entity Framework , das ich benutze, einrichten, um diese Symbole beim Datenabruf aus der Datenbank absolut zu entfernen?

    
Roman 22.02.2012, 23:34
quelle

3 Antworten

2

\ u003c und ähnliche Codes sind perfekt für JS gültig. Sie können ganze JS-Dateien mit dieser Syntax verschleiern, wenn Sie dies wünschen. Im Wesentlichen sehen Sie ein Escape-Zeichen \, u für Unicode und dann einen 4-stelligen Hex-Code, der sich auf ein Symbol bezieht.

Ссылка

\ u003c - Wie Sie bereits bemerkt haben, ist das & lt; Zeichen.

Ein Ansatz, um dies auf der MVC-Seite zu "reparieren", wäre, eine RegEx zu schreiben, die nach dem Muster \ u sucht - und dann die nächsten vier Zeichen erfasst. Sie könnten sie dann in tatsächliche Unicode-Zeichen entschlüsseln - und den resultierenden Text über Ihre XSS-Präventionsalgorithmen ausführen.

Wie Sie in Ihrer Frage bemerkt haben - suchen Sie einfach nach "& lt;" hilft nicht. Sie können auch nicht einfach nach "\ u003cscript" suchen - da dies davon ausgeht, dass der potentielle Hacker nicht einfach das gesamte "Skript" -Tag-Wort unicode-codiert hat. Der sicherere Ansatz besteht darin, alle diese Arten von Codes zu entschlüsseln und dann Ihren HTML-Code im Klartext zu bereinigen.

Übrigens könnte es Ihnen besser erscheinen, wenn Sie bemerken, dass dies eine der häufigsten (und bisher kaum gelösten) Probleme in der XSS-Prävention ist. Sie sind also nicht allein, wenn Sie eine bessere Lösung wünschen ...

Sie können die folgenden Bibliotheken auschecken, um bei der eigentlichen HTML-Bereinigung zu helfen:

Ссылка (Microsofts Lösungsversuch - allerdings sehr schlechtes Nutzerfeedback) Ссылка (Ein privates Projekt, das so viele Präventionsmaßnahmen durchführen soll. Ich finde es ist schwer zu benutzen und schlecht in .NET implementiert.

Beide sind jedoch gute Referenzen.

    
Troy Alford 13.06.2012, 21:37
quelle
1

Sie müssen Ihre Zeichenfolge als HTML kodieren, bevor Sie sie an Underscore senden.

" HTML-Entweichen in Underscore.js Vorlagen " erläutert, wie dies zu tun ist.

    
Mike Samuel 23.02.2012 06:10
quelle
0

Wenn Sie uncodierten Inhalt schreiben möchten, müssen Sie die verwenden Html.Raw () Helfer:

%Vor%

Bearbeiten:

Ich denke, vielleicht verstehe ich nicht, was Ihr Problem ist. Zum Beispiel habe ich in einem Test-Controller die folgenden

%Vor%

In der zugehörigen Ansicht:

%Vor%

Was wiederum an die Konsole ausgegeben wird:

%Vor%

Und öffnet die Warnung.

    
Jesse 23.02.2012 03:09
quelle