2012-07-08 53 views
6

MS的AntiXSS(v4.2.1)Sanitizer.GetSafeHtmlFragment(string)方法正在從我的輸入中刪除<br><br />標記。這是否應該發生?有沒有辦法解決它?Sanitizer.GetSafeHtmlFragment應該刪除<br>元素嗎?

它似乎是刪除\n\r字符,所以我不能在消毒劑完成其工作後調用Replace()

回答

7

4.2.x版本受到HTML清理工具中精確檢測到的安全漏洞的驅使。這個事實的更多信息:

然而,似乎除了修復漏洞的消毒改爲更加積極的到的是幾乎無法使用的地步。在WPL CodePlex站點(GetSafeHtmlFragment replacing all html tags)中存在一個關於此事實的報告問題。

如果您的問題只有<br>標記,並且您希望堅持使用AntiXSS消毒劑,那麼您可以實施一種醜陋的解決方法,通過預處理您的輸入,然後後處理消毒劑的結果。

像這樣的東西(僅供參考代碼):

static void Main(string[] args) 
{ 
    string input = "<br>Hello<br/>World!"; 

    input = EscapeHtmlBr(input); 
    var result = Sanitizer.GetSafeHtmlFragment(input); 
    result = UnescapeHtmlBr(result); 

    Console.WriteLine(result); 
} 

const string BrMarker = @"|br|"; 

private static string UnescapeHtmlBr(string result) 
{ 
    result = result.Replace(BrMarker, "<br />"); 

    return result; 
} 

private static string EscapeHtmlBr(string input) 
{ 
    input = input.Replace("<br>", BrMarker); 
    input = input.Replace("<br />", BrMarker); 
    input = input.Replace("<br/>", BrMarker); 

    return input; 
} 
+2

謝謝...這是我所「希望」的。但是,它看起來像AntiXSS庫現在基本上是無用的。我想在一個所見即所得的文本區域使用它...它清理得太多了。 ;( – Chaddeus 2012-07-08 16:34:40

+1

只需要添加,看起來如果你想要不那麼激進的功能,我們需要使用屬於AjaxControlToolkit的「HTMLsantizationLibary.dll」 - http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/HTMLEditorExtender/ HTMLEditorExtender.aspx – RemarkLima 2013-05-17 12:32:08