Ho HTML sicuro / disinfettato salvato in una tabella DB.
Come posso avere questo contenuto HTML scritto in una vista Razor?
Sfugge sempre a personaggi come <
e e commerciali &
.
Ho HTML sicuro / disinfettato salvato in una tabella DB.
Come posso avere questo contenuto HTML scritto in una vista Razor?
Sfugge sempre a personaggi come <
e e commerciali &
.
Risposte:
Supponiamo che il tuo contenuto sia all'interno di una stringa denominata mystring
...
Puoi usare:
@Html.Raw(mystring)
In alternativa, puoi convertire la stringa in HtmlString
o qualsiasi altro tipo implementato IHtmlString
nel modello o direttamente in linea e utilizzare regolarmente @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
razor
sintassi ed Html.Raw
è sicuramente disponibile per me.
In ASP.NET MVC 3 Dovresti fare qualcosa del genere:
// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
// Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)
Puoi usare
@{ WriteLiteral("html string"); }
Html.Raw()
non funziona lì
A volte può essere difficile usare HTML grezzo. Principalmente a causa della vulnerabilità XSS. Se questo è un problema, ma vuoi comunque usare HTML grezzo, puoi codificare le parti spaventose.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Risultati in
(<b><script>console.log('insert')</script>Hello</b>)
Oltre a utilizzare @MvcHtmlString.Create(ViewBag.Stuff)
come suggerito da Dommer, ti suggerisco di utilizzare anche la libreria AntiXSS come phill suggerito http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx
Codifica quasi tutta la possibile stringa di attacco XSS.
Esempio completo per l'utilizzo delle funzioni del modello in RazorEngine (ad esempio per la generazione di e-mail):
@model SomeModel
@{
Func<PropertyChangeInfo, object> PropInfo =
@<tr class="property">
<td>
@item.PropertyName
</td>
<td class="value">
<small class="old">@item.OldValue</small>
<small class="new">@item.CurrentValue</small>
</td>
</tr>;
}
<body>
@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }
</body>
@Html.Raw()