MS的AntiXSS (v4.2.1) Sanitizer.GetSafeHtmlFragment(string)方法从我的输入中删除了<br>和<br />标记。这是应该发生的吗?有没有办法绕过它?
它似乎还删除了\n和\r字符,因此在杀菌器完成其工作后,我无法调用Replace()。
发布于 2012-07-08 23:57:06
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;
}https://stackoverflow.com/questions/11383891
复制相似问题