私は安全で衛生的なHTMLをDBテーブルに保存しました。
このHTMLコンテンツをRazorビューで書き出すにはどうすればよいですか?
これは常に<
のような文字と&
へのアンパーサンドをエスケープします。
コンテンツがmystring
..という名前の文字列の中にあるとします。
あなたが使用することができます:
@Html.Raw(mystring)
あるいは、文字列を HtmlString
またはモデル内でIHtmlString
を実装する、または直接インライン展開して通常の@
を使用するその他の型に変換できます。
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
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)
あなたが使用することができます
@{ WriteLiteral("html string"); }
生のHTMLを使用するのが難しい場合があります。主にXSSの脆弱性によるものです。それが心配だが、それでも生のHTMLを使いたい場合は、怖い部分をエンコードすることができます。
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
の結果
(<b><script>console.log('insert')</script>Hello</b>)
あなたはこのようにコントローラのviewdataにあなたの文字列を入れることができます:
ViewData["string"] = DBstring;
そして、このviewdataをビューの中で次のように呼び出します。
@Html.Raw(ViewData["string"].ToString())
Dommerによって提案されているように@MvcHtmlString.Create(ViewBag.Stuff)
を使用することとは別に、提案されているように AntiXSS libraryも使用することをお勧めします http://haacked.com/archive/2010/04/06/using-antixss-as-the- asp-net.aspxのデフォルトエンコーダ
ほぼすべてのXSS攻撃文字列をエンコードします。