2011-10-11 80 views
0

我目前使用的微軟AntiXSS庫和使用GetSafeHtmlFragment方法如下:Microsoft Anti XSS Library編碼&符號?

public static string SanitizeHtml(this string s) 
{ 
    return Sanitizer.GetSafeHtmlFragment(s); 
} 

但是,如果我在一個字符串傳遞這樣的:

black & white

...這是編碼&符號,因此它變成:

black & white

此庫這個正常的行爲?有沒有辦法阻止它編碼這個字符?

+0

我相信這是正常的行爲,因爲你正在使用'GetSafeHtmlFragmet' –

回答

0

這是這個庫的正常行爲?

是的,它修復了您的HTML,因爲您使用的是GetSafeHtmlFragment。否則,你會以無效的HTML片段結束。在HTML中,&字符具有特殊含義。我不認爲這種行爲可以修改。

+0

我明白了 - 那麼在安全地輸出用戶生成的內容時,通常的做法是什麼?但是在顯示'&'字符時(而不是它們的編碼等價物)?我應該使用不同的庫/方法嗎? – marcusstarnes

+0

@marcusstarnes,如果你想在網頁(HTML)中顯示它,你應該對它進行編碼。如果你想在網頁中顯示'&'字符,你應該使用'&',這正是AntiXss庫所做的。 –

+0

好吧,我明白了,但我的問題是,實際字符&正在渲染到屏幕。我正在使用Razor,所以我認爲唯一的解決方法就是用Html.Raw(「black & white」)包裝任何輸出。我只想將它顯示爲&而不是&,但仍然使用AntiXss庫,以確保在呈現之前剝離了任何惡意腳本等。我應該實質上是否打電話給@ Html.Raw(GetSafeHtmlFragment(「黑與白」))? – marcusstarnes

1

我不認爲這是最好的解決方案。如果你使用HTML.Raw(),那麼你就會讓自己容易受到XSS攻擊,除非你可以絕對確保該字符串始終安全並且對HTML.Raw()的所有用途都是安全的。