Sanitizer.GetSafeHtmlFragment应该删除<br>元素吗?

Cha*_*eus 6 c# antixsslibrary

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

它似乎也是删除\n\r字符,所以我不能Replace()在清洁剂完成其工作后打电话.

Joã*_*elo 7

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

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

如果您的问题仅与<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;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢......这就是我所希望的.但是,看起来AntiXSS库现在基本没用了.我想在WYSIWYG文本区域使用它...它的清理太多了.( (2认同)