2011-10-15 47 views
0

我正在使用Microsoft的AntiXSS庫來顯示在網頁上的HtmlEncode內容。如何使用AntiXSS但保持輸出可讀?

問題是,它編碼比我更希望它。例如,它編碼冒號「:」。

有沒有一種辦法的HTMLEncode,但不是某些字符?

一個例子是,如果我有這樣一個字符串「RE:電子郵件主題行」,是有可能使用AntiXSS庫來編碼字符串,但它沒有顯示爲「RE :電子郵件主題行」 。我希望「:」出現,但仍然希望對輸出進行編碼。

更新: 問題是,我用剃刀和「@」已編碼輸出。所以通過使用「@」和AntiXSS Html.Encode調用我是雙重編碼。

+0

你爲什麼要它不編碼某些字符?像冒號一樣。 –

+1

通過試圖阻止反xss庫完全按照自己的意願去做,你正在削弱它的保護。它的編碼是有原因的。 – Amy

+0

如果我有一個像「RE:電子郵件主題行」這樣的字符串,我該如何在頁面上顯示它而不是「RE :電子郵件主題行」? – dtc

回答

1

如果你看到屏幕上的編碼結果因爲您的評論似乎表明,你是雙編碼。 :是冒號,並且這將是AntiXSS的輸出,但之後的某些內容是編碼&到& amp;

這是做什麼取決於你在用什麼。如果您使用的是WebForms,那麼默認情況下,一大堆控件將對文本和其他屬性進行編碼,並停止此操作取決於控件。如果您使用的是MVC,則<%將執行您將其添加到輸出流之前所經過的內容的編碼。你可以,如果你使用MVC3替換默認編碼器(AntiXSS beta 4.1,或者roll your own如果你不想使用試用版),或告訴MVC你會輸出一個HtmlString輸出已經編碼字符串。

.NET 4.5 AntiXSS的核心部分將通過一個配置開關是內置的和可配置的。

+0

是的,這是發生了什麼事。我使用Razor,@語法已經編碼輸出。所以當我做了@ AntiXss.HtmlEncode(myMessage.Subject)之類的東西時,它是雙重編碼。 – dtc

相關問題