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

它似乎也要删除\n\r字符,因此在 sanitizer 完成工作后,我无法调用Replace()

最佳答案

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

  • Microsoft Security Bulletin MS12-007 - Important
  • Microsoft Anti-XSS Library Bypass (MS12-007)

  • 但是,似乎除修复漏洞外, sanitizer 还被更改为更具攻击性,几乎无法使用。 WPL CodePlex网站(GetSafeHtmlFragment replacing all html tags)中有一个有关此事实的报告问题。

    如果您的问题仅在于<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;
    }
    

    关于c# - Sanitizer.GetSafeHtmlFragment是否应该删除<br>元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11383891/

    10-12 05:05