لقد تم حفظ 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"); }
في بعض الأحيان قد يكون من الصعب استخدام لغة تأشير النص الفائق الخام. في الغالب بسبب ضعف XSS. إذا كان هذا مصدر قلق ، لكنك لا تزال ترغب في استخدام html raw ، يمكنك تشفير الأجزاء المخيفة.
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
النتائج في
(<b><script>console.log('insert')</script>Hello</b>)
يمكنك وضع السلسلة في viewdata في جهاز التحكم مثل هذا:
ViewData["string"] = DBstring;
ثم اتصل بهذا العرض في طريقة العرض مثل هذا:
@Html.Raw(ViewData["string"].ToString())
بصرف النظر عن استخدام @MvcHtmlString.Create(ViewBag.Stuff)
كما اقترح Dommer ، أقترح عليك أيضًا استخدام AntiXSS library كما هو مقترح phill http://haacked.com/archive/2010/04/06/using-antixss-as-the- برنامج التشفير الافتراضي لـ asp-net.aspx
إنه يشفر تقريبا كل سلسلة هجوم XSS الممكنة.