2010-11-25 3 views
377

DBテーブルに保存された安全な/消されたHTMLを取得しました。エスケープされていないHTML文字列の書き込み/出力

どのようにこのHTMLコンテンツをRazorビューに書き出すことができますか?

<やアンパサンドなどの文字は、常に&amp;にエスケープされます。あなたのコンテンツを想定

+62

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

結果 - '@ Html.Raw()' –

+0

動的型付けで匿名型とでこれをやろうとしている私のような人々を保存するにはこれはうまくいきません - 私のより具体的な質問に[この回答](http://stackoverflow.com/a/31306368/957950)を参照してください。あなたの状況が許せば、強く型付けされたビューでこのアプローチを使用することはなお良いですが。 – brichins

答えて

571

は... mystringという名前の文字列の中

を使用でき

です:

@Html.Raw(mystring) 

代わりにあなたがHtmlStringまたはIHtmlStringモデルで、または直接を実装する任意の他のタイプにあなたの文字列を変換することができますインラインで使用してください。@

@{ var myHtmlString = new HtmlString(mystring);} 
@myHtmlString 
+0

この回答をありがとう。私が学んでいた少しの仕事を終えるのを助けました。私はMVC 3を使用していますが、Rawメソッドを正しく使用しています。 –

+1

私はまだMVC 3を学んでいて、これは私を逃していました。 –

+1

答えをありがとうございます!私は、MVC3の最新バージョンを使用していますが、これまでのところHtml.Rawはありません:( –

70

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) 
+13

渡された文字列がnullの場合、HTML.Rawが爆発するので、このメソッドを使用することをお勧めします。 – 37Stars

+1

ありがとう、これはとてもきれいです! – Hajjat

2

別にDommerにより示唆されるよう@MvcHtmlString.Create(ViewBag.Stuff) を使用してから、私はそれはほとんどすべての可能なXSS攻撃の文字列をエンコードするあなたも示唆したフィルhttp://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

としてAntiXSSライブラリを使用することをお勧めします。

ViewData["string"] = DBstring; 

をしてから、このような観点でそのViewDataを呼び出す:

@Html.Raw(ViewData["string"].ToString()) 
+0

ASP.NET MVCはほとんどのXSSの脆弱性を既に処理していませんか? – William

49

あなたは、あなたがこのようにコントローラでのViewDataにあなたの文字列を置くことができる

@{ WriteLiteral("html string"); } 
+4

WriteLiteralの+1、その1つを知らなかった –

+4

これは私にとって最高だった、Hangfireアプリ内でRazorを使って電子メールを送信していた... 'Html.Raw() 'がそこで動作しない – shanabus

+0

1 WriteLiteral –

4

を使用することができます生のhtmlを使用するのが難しい場合もあります。主にXSSの脆弱性によるものです。それが懸念されるが、未加工のhtmlを使いたい場合は、恐ろしい部分をエンコードすることができます。人々に以下の議論の長い歴史を保存するには

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

関連する問題