6

MS 的 AntiXSS (v4.2.1)Sanitizer.GetSafeHtmlFragment(string)方法正在从我的输入中删除<br>和标记。<br />这应该发生吗?有办法解决吗?

它似乎也在删除\n和字符,所以在消毒剂完成工作后\r我无法打电话。Replace()

4

1 回答 1

7

4.2.x 版本的动机是在 HTML sanitizer 中精确检测到一个安全漏洞。关于这个事实的更多信息:

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

如果您的问题仅与<br>标签有关,并且您想坚持使用 AntiXSS sanitizer,那么您可以实施一个丑陋的解决方法,即预处理您的输入,然后对 sanitizer 的结果进行后处理。

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

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;
}
于 2012-07-08T15:57:06.020 回答