web-dev-qa-db-ja.com

エスケープされていないHTML文字列の書き込み/出力

私は安全で衛生的なHTMLをDBテーブルに保存しました。

このHTMLコンテンツをRazorビューで書き出すにはどうすればよいですか?

これは常に<のような文字と&amp;へのアンパーサンドをエスケープします。

414
AGS

コンテンツがmystring..という名前の文字列の中にあるとします。

あなたが使用することができます:

@Html.Raw(mystring)

あるいは、文字列を HtmlString またはモデル内でIHtmlStringを実装する、または直接インライン展開して通常の@を使用するその他の型に変換できます。

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
626
Lorenzo

ASP.NET MVC 3では、次のようにします。

// 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

あなたが使用することができます

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

生のHTMLを使用するのが難しい場合があります。主にXSSの脆弱性によるものです。それが心配だが、それでも生のHTMLを使いたい場合は、怖い部分をエンコードすることができます。

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

の結果

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)
10
Travis J

あなたはこのようにコントローラのviewdataにあなたの文字列を入れることができます:

 ViewData["string"] = DBstring;

そして、このviewdataをビューの中で次のように呼び出します。

@Html.Raw(ViewData["string"].ToString())
4
Ajay

Dommerによって提案されているように@MvcHtmlString.Create(ViewBag.Stuff)を使用することとは別に、提案されているように AntiXSS libraryも使用することをお勧めします http://haacked.com/archive/2010/04/06/using-antixss-as-the- asp-net.aspxのデフォルトエンコーダ

ほぼすべてのXSS攻撃文字列をエンコードします。

2
ZeNo