首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sanitizer.GetSafeHtmlFragment是否应该删除<br>元素?

Sanitizer.GetSafeHtmlFragment是否应该删除<br>元素?
EN

Stack Overflow用户
提问于 2012-07-08 22:29:54
回答 1查看 9.1K关注 0票数 6

MS的AntiXSS (v4.2.1) Sanitizer.GetSafeHtmlFragment(string)方法从我的输入中删除了<br><br />标记。这是应该发生的吗?有没有办法绕过它?

它似乎还删除了\n\r字符,因此在杀菌器完成其工作后,我无法调用Replace()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-08 23:57:06

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

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

然而,似乎除了修复漏洞外,消毒器被更改为更具攻击性,以至于几乎无法使用。在WPL CodePlex站点(GetSafeHtmlFragment replacing all html tags)中有一个关于此事实的报告问题。

如果你的问题只是与<br>标签有关,而你又想坚持使用AntiXSS消毒器,那么你可以实现一个丑陋的变通办法,先对输入进行预处理,然后再对消毒器的结果进行后处理。

如下所示(仅用于说明目的的代码):

代码语言:javascript
复制
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;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11383891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档