web-dev-qa-db-fra.com

Écrire / sortir des chaînes HTML sans échapper

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 &amp;.

421
AGS

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
632
Lorenzo

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)
75
Tom Chantler

Vous pouvez utiliser

@{ WriteLiteral("html string"); }
59
Andrus

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>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)
11
Travis J

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())
4
Ajay

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.

2
ZeNo