Bir DB tablosuna kaydedilmiş güvenli / sterilize edilmiş HTML var.
Bu HTML içeriğini bir Jilet görünümünde nasıl yazdırabilirim?
Her zaman gibi karakterlerden kaçar <
ve ve işareti alır &
.
Bir DB tablosuna kaydedilmiş güvenli / sterilize edilmiş HTML var.
Bu HTML içeriğini bir Jilet görünümünde nasıl yazdırabilirim?
Her zaman gibi karakterlerden kaçar <
ve ve işareti alır &
.
Yanıtlar:
Diyelim ki içeriğiniz adlı bir dizenin içindedir mystring
...
Kullanabilirsiniz:
@Html.Raw(mystring)
Alternatif olarak, dizenizi HtmlString
veya IHtmlString
modelde veya doğrudan satır içi olarak uygulanan herhangi bir türe dönüştürebilir ve düzenli olarak kullanabilirsiniz @
:
@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
razor
sözdizimi ile en son MVC 3 kullanıyorum ve Html.Raw
kesinlikle benim için kullanılabilir.
ASP.NET MVC 3'te şöyle bir şey yapmalısınız:
// 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)
Kullanabilirsiniz
@{ WriteLiteral("html string"); }
Html.Raw()
orada çalışmıyor
Bazen ham html kullanmak zor olabilir. Çoğunlukla XSS güvenlik açığı nedeniyle. Bu bir endişe, ancak yine de ham html kullanmak istiyorsanız, korkunç parçaları kodlayabilirsiniz.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Sonuçları
(<b><script>console.log('insert')</script>Hello</b>)
@MvcHtmlString.Create(ViewBag.Stuff)
Dommer tarafından önerildiği gibi kullanmanın yanı sıra, önerilen phill olarak AntiXSS kitaplığını kullanmanızı öneririm http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx
Neredeyse tüm olası XSS saldırı dizesini kodlar.
RazorEngine'de şablon işlevlerini kullanmak için tam örnek (örneğin, e-posta üretimi için):
@model SomeModel
@{
Func<PropertyChangeInfo, object> PropInfo =
@<tr class="property">
<td>
@item.PropertyName
</td>
<td class="value">
<small class="old">@item.OldValue</small>
<small class="new">@item.CurrentValue</small>
</td>
</tr>;
}
<body>
@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }
</body>
@Html.Raw()