是否存在一些魔術現有代碼在MVC 2 Html.Encode()字符串,並允許某些HTML標記,如段落標記和休息? (從LINQ到SQL數據庫中的字段來)ASP.NET MVC:如何在Html編碼內容中允許一些HTML標記?
一個可怕的代碼示例達到的效果:
Html.Encode(Model.fieldName).Replace("<br />", "<br />")
什麼將是非常好的是重載的東西,傳遞給它一個數組(或物體)全允許的html標籤。
是否存在一些魔術現有代碼在MVC 2 Html.Encode()字符串,並允許某些HTML標記,如段落標記和休息? (從LINQ到SQL數據庫中的字段來)ASP.NET MVC:如何在Html編碼內容中允許一些HTML標記?
一個可怕的代碼示例達到的效果:
Html.Encode(Model.fieldName).Replace("<br />", "<br />")
什麼將是非常好的是重載的東西,傳遞給它一個數組(或物體)全允許的html標籤。
對於ASP.NET或MVC沒有內置任何內容,但使用正則表達式編寫自己的白名單並不困難。 Here's one that Jeff wrote,雖然它的邊緣很粗糙......
我想不出任何東西離開蝙蝠,但我想你可以寫一個擴展方法,允許你添加一個項目允許的項目列表。
Html.Encode(Mode.fieldName, List<items> Myitems);
它可以修改允許的標籤爲<
等,然後編碼其餘的像正常。
根據正則表達式創建自己的白名單不是一個好主意,因爲您可能會無意中爲XSS打開安全漏洞。
從桑德森的書「臨ASP.NET MVC3框架」:」 ......唯一可行的緩解措施是嚴格的,基於白名單過濾:使用像HTML Agility Pack庫,以確保用戶提供的標記包含只的您明確允許的標記。「
Sanderson繼續提供一個鏈接到一個網站,演示瞭如果您使用正則表達式方法,您必須測試的廣泛的XSS技術。檢查出http://ha.ckers.org/xss.html
這樣做的唯一問題是,如果有人明確地在他們的HTML中預期它會顯示,而不是轉換爲實際的新行,將會感到驚訝當它被你的例程「非轉換」時... – 2010-03-29 05:16:55