In un file cshtml, sto assegnando una stringa a un attributo. Ad esempio:Devo codificare i valori degli attributi in Rasoio MVC?
<input name="somename" value="@Model.Value">
Da @ Model.Value stringa può contenere qualsiasi carattere Unicode, ovviamente la stringa deve essere codificata. Will Razor codificherà questo valore automaticamente? Immagino che non lo farò o meno perché potrei facilmente mettere un @ Html.Raw subito dopo per suddividere l'intera cosa in due tag.
Penso che quello che ho bisogno di fare è questo:
<input name="somename" value="@Html.Raw(Html.AttributeEncode(Model.Value))">
E 'corretto?
Allo stesso modo, se sto incorporando un valore di stringa in una stringa JavaScript in uno script, devo usare:
//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>
Chiamare @ Html.Raw (Html.AttributeEncode (Model.Value)) non è ridondante, poiché Razor codifica il valore finale solo se è di tipo stringa. Poiché sto codificandolo e restituendo un oggetto MvcHtmlString, Razor non tenterà di codificarlo nuovamente. * Codifica attributo HTML * codifica solo un sottoinsieme dei caratteri che * codifica HTML * fa, ma poiché la codifica utilizza lo stesso formato (ad esempio "&name;", "nnnn;") ed è corretto codificare caratteri che altrimenti non avrebbero bisogno di codifica , la codifica HTML Razor è sufficiente per i valori degli attributi HTML e HTML. In questo caso è sicuro usare solo @ Model.Value. – Triynko
Sono anche ben consapevole della necessità di codifica per evitare rischi per la sicurezza come l'iniezione di HTML. Stavo solo sottolineando che, a meno che Razor non sia abbastanza intelligente da conoscere il contesto in cui viene inserita la stringa, non è possibile scegliere una codifica diversa per i valori degli attributi HTML rispetto al contenuto HTML. Non è così, e poiché la codifica degli attributi è un sottoinsieme della codifica HTML, va bene solo la codifica HTML, indipendentemente da dove finisce la stringa Razor. Vedi: http://stackoverflow.com/a/13246856/88409 – Triynko
Devo anche menzionarlo nel caso del @Html.Raw (HttpUtility.JavaScriptStringEncode (Model.Value)), assolutamente necessario, poiché la codifica HTML sarebbe errata e potrebbe effettivamente comportare un rischio per la sicurezza. In tal caso, è assolutamente necessario prendere il controllo della codifica e assicurarsi che ciò che si sta iniettando nello stream HTML nella posizione esatta in cui viene iniettato sia formattato correttamente. – Triynko