In einer Cshtml-Datei weise ich einem Attribut eine Zeichenfolge zu. Beispiel:Muss ich Attributwerte in MVC Razor kodieren?
Da @ Model.Value Zeichenfolge ein beliebiges Unicode-Zeichen enthalten kann, muss die Zeichenfolge natürlich codiert sein. Will Razor diesen Wert automatisch kodieren? Ich vermute es wird nicht oder kann nicht, weil ich sofort eine @ Html.Raw schreiben konnte, um das Ganze in zwei Tags aufzuteilen.
Ich denke, was ich brauche, dies zu tun ist:
<input name="somename" value="@Html.Raw(Html.AttributeEncode(Model.Value))">
Ist das richtig?
Ebenso, wenn ich einen String-Wert in einem JavaScript-String in einem Skript Einbetten soll ich verwenden:
//I could use Ajax instead of HttpUtility here, but Ajax just wraps the same call.
<script>$('id').data('key','@Html.Raw(HttpUtility.JavaScriptStringEncode(Model.Value))');</script>
Das Aufrufen von @ Html.Raw (Html.AttributeEncode (Model.Value)) ist nicht redundant, da Razor den endgültigen Wert nur codiert, wenn es vom Typ string ist. Da ich es kodiere und einen MvcHtmlString zurückschicke, versucht Razor nicht, es erneut zu kodieren. * HTML Attribut Encoding * kodiert nur eine Teilmenge der Zeichen, die * HTML Encoding * tut, aber da die Encodierung das gleiche Format verwendet (zB "&name;", "nnnn;") und es ist in Ordnung, Zeichen zu codieren, die sonst keine Codierung benötigen würden Die HTML-Kodierung von Razor reicht für HTML- und HTML-Attributwerte aus. Es ist also sicher, in diesem Fall einfach @ Model.Value zu verwenden. – Triynko
Ich bin mir auch der Notwendigkeit der Verschlüsselung bewusst, um Sicherheitsrisiken wie HTML-Injection zu vermeiden. Ich habe nur darauf hingewiesen, dass, wenn Razor nicht schlau genug ist, den Kontext zu kennen, in dem der String eingebettet wird, er unmöglich eine andere Codierung für HTML-Attributwerte als HTML-Inhalt wählen kann. Dies ist nicht der Fall, und da die Attributcodierung eine Teilmenge der HTML-Codierung ist, ist es in Ordnung, nur HTML zu codieren, unabhängig davon, wo die Razor-Zeichenfolge endet. Siehe: http://StackOverflow.com/a/13246856/88409 – Triynko
Ich sollte das auch im Fall von @Html erwähnen.Raw (HttpUtility.JavaScriptStringEncode (Model.Value)), das ist absolut notwendig, weil HTML-Codierung falsch wäre und tatsächlich zu einem Sicherheitsrisiko führen könnte. In diesem Fall müssen Sie unbedingt die Kontrolle über die Codierung übernehmen und sicherstellen, dass das, was Sie in den HTML-Stream an dem genauen Ort injizieren, an dem Sie es injizieren, korrekt formatiert ist. – Triynko