MS的AntiXSS(v4.2.1)Sanitizer.GetSafeHtmlFragment(string)
方法正在从我的输入中删除<br>
和<br />
个标记。这应该发生吗?有办法吗?
似乎也删除了\n
和\r
个字符,因此在清理程序完成其工作后我无法调用Replace()
。
答案 0 :(得分:7)
4.2.x版本的动机是在HTML清理程序中精确检测到的安全漏洞。关于这个事实的更多信息:
然而,似乎除了修复漏洞之外,消毒剂变得更加激进,几乎无法使用。在WPL CodePlex网站(GetSafeHtmlFragment replacing all html tags)中报告了有关此事实的问题。
如果您的问题只有<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;
}