J'ai du code HTML sécurisé/assaini enregistré dans une table de base de données.
Comment puis-je avoir ce contenu HTML écrit dans une vue Razor?
Il échappe toujours aux caractères tels que <
et aux esperluettes en &
.
En supposant que votre contenu se trouve dans une chaîne nommée mystring
...
Vous pouvez utiliser:
@Html.Raw(mystring)
Sinon, vous pouvez convertir votre chaîne en HtmlString
ou en tout autre type implémentant IHtmlString
dans le modèle ou directement en ligne et utilisant des caractères réguliers @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
Dans ASP.NET MVC 3, procédez comme suit:
// 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)
Vous pouvez utiliser
@{ WriteLiteral("html string"); }
Parfois, il peut être difficile d’utiliser du code HTML brut. Principalement à cause de la vulnérabilité XSS. Si cela vous pose problème, mais que vous souhaitiez toujours utiliser du code HTML brut, vous pouvez coder les parties les plus effrayantes.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Résulte en
(<b><script>console.log('insert')</script>Hello</b>)
Vous pouvez mettre votre chaîne dans viewdata dans controller comme ceci:
ViewData["string"] = DBstring;
Et ensuite appelez cette viewdata dans la vue comme ceci:
@Html.Raw(ViewData["string"].ToString())
En plus d'utiliser @MvcHtmlString.Create(ViewBag.Stuff)
comme suggéré par Dommer, je vous suggère d'utiliser également la bibliothèque AntiXSS comme suggéré phill http://haacked.com/archive/2010/04/06 /using-antixss-as-the-default-encoder-for-asp-net.aspx
Il code presque toute la chaîne d'attaque XSS possible.