2010-03-29 69 views
3

是否存在一些魔術現有代碼在MVC 2 Html.Encode()字符串,並允許某些HTML標記,如段落標記和休息? (從LINQ到SQL數據庫中的字段來)ASP.NET MVC:如何在Html編碼內容中允許一些HTML標記?

一個可怕的代碼示例達到的效果:

Html.Encode(Model.fieldName).Replace("&lt;br /&gt;", "<br />") 

什麼將是非常好的是重載的東西,傳遞給它一個數組(或物體)全允許的html標籤。

回答

4

對於ASP.NET或MVC沒有內置任何內容,但使用正則表達式編寫自己的白名單並不困難。 Here's one that Jeff wrote,雖然它的邊緣很粗糙......

2

我想不出任何東西離開蝙蝠,但我想你可以寫一個擴展方法,允許你添加一個項目允許的項目列表。

Html.Encode(Mode.fieldName, List<items> Myitems); 

它可以修改允許的標籤爲&lt;等,然後編碼其餘的像正常。

+1

這樣做的唯一問題是,如果有人明確地在他們的HTML中預期它會顯示,而不是轉換爲實際的新行,將會感到驚訝當它被你的例程「非轉換」時... – 2010-03-29 05:16:55

5

根據正則表達式創建自己的白名單不是一個好主意,因爲您可能會無意中爲XSS打開安全漏洞。

從桑德森的書「臨ASP.NET MVC3框架」:」 ......唯一可行的緩解措施是嚴格的,基於白名單過濾:使用像HTML Agility Pack庫,以確保用戶提供的標記包含的您明確允許的標記。「

Sanderson繼續提供一個鏈接到一個網站,演示瞭如果您使用正則表達式方法,您必須測試的廣泛的XSS技術。檢查出http://ha.ckers.org/xss.html