Sanitizer.GetSafeHtmlFragment应该删除元素吗?

MS的AntiXSS(v4.2.1) Sanitizer.GetSafeHtmlFragment(string)方法正在从我的输入中删除

标记。 这应该发生吗? 有办法解决吗?

它似乎也删除了\n\r \n字符,因此在清理程序完成其工作后我无法调用Replace()

4.2.x版本的动机是在HTML清理程序中精确检测到的安全漏洞。 有关此事实的更多信息:

  • Microsoft安全公告MS12-007 – 重要
  • Microsoft Anti-XSS Library Bypass(MS12-007)

然而,似乎除了修复漏洞之外,消毒剂被改变为更具侵略性,几乎无法使用。 在WPL CodePlex网站上有一个关于这个事实的报道问题( GetSafeHtmlFragment替换了所有的html标签 )。

如果您的问题仅与
标签有关,并且您希望坚持使用AntiXSS清洁剂,那么您可以实施一个丑陋的解决方法来预处理您的输入,然后对清理程序的结果进行后处理。

像这样的东西(代码仅用于说明目的):

 static void Main(string[] args) { string input = "
Hello
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, "
"); return result; } private static string EscapeHtmlBr(string input) { input = input.Replace("
", BrMarker); input = input.Replace("
", BrMarker); input = input.Replace("
", BrMarker); return input; }