2009-03-04 3 views
5

Ich habe ein Textfeld in einer ASP.NET MVC-Anwendung, wo der Benutzer Text eingeben kann. Wenn ich den Text dem Benutzer zeige, verwende ich Html.Encode, um böswillige Eingaben zu verhindern. Das Problem ist, dass der Benutzer Spanisch eingeben kann und vielleicht gibt er año und die Encode wandelt das in a&#241o um. Wie kann ich das verhindern?Wie kann ich beim Codieren von HTML-Eingaben für die Sicherheit die Codierung internationaler Zeichen wie "Ñ oder ñ" vermeiden?

EDIT: In der generierten HTML, sehe ich:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a> 

Später in der Seite, die ich dieses haben, und dieses Mal die Anzeige korrekt ist:

<b>a1 'a1' Cama&#241;o</b> 

Die erste wird diese erzeugt übrigens:

<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %> 

und die zweite wie folgt aus:

<%= Html.Encode(Model.NAME)%> 

Also meine Vermutung ist, dass das Problem mit der Html.RouteLink ist.

+0

Ist Ihre Beschwerde, dass es internationale Zeichen codiert, oder dass der Benutzer codierte Zeichen und nicht die Zeichen sehen, die sie eingegeben haben? Wenn es Letzteres ist, dann ist die "zweimal zufällig kodieren" Antwort richtig. Wenn nicht, lass es uns wissen. – Eddie

Antwort

2

Also meine Vermutung ist, dass das Problem mit dem Html.RouteLink

Yep ist. Sie sollten den Parameter, der in RouteLink geht, nicht HTML-encodieren, er generiert den HTML-Code selbst und kümmert sich darum um die Flucht für Sie.

5

Sie codieren zweimal versehentlich?

Wenn Sie beispielsweise den Inhalt des Textarea programmgesteuert auf der Serverseite festlegen, wird der Inhalt beim Rendern automatisch codiert.

Versuchen Sie sich die HTML-Ausgabe des Textfelds anzusehen.

Normalerweise, wenn Sie Escapes innerhalb Textarea Inhalt setzen, sollte es in der Textfläche angezeigt werden decodiert (als beabsichtigte Unescaped-Zeichen angezeigt).

So könnte es ein Problem von versehentlich Html.Encode zweimal unnötig sein.

Wenn Ihre Daten bereits maskiert sind, können Sie sie (Html.Decode) vor dem Einfügen in das Textfeld entfliehen.

+0

Gleicher Gedanke hier. +1 – Tomalak

+0

Sah es. Noch bewerben, nein? – chakrit

Verwandte Themen