我需要在网页上显示字符串内容(我无法控制)。除了某些有限数量的HTML标签(strong,em,p,br)之外,所有内容都应按原样显示。那些应该受到尊重,我的理解是让他们安全无懈可击。其他所有内容都应按原样显示。
令人惊讶的是,大多数HTML清洁剂都是侵入性的,因为它们的目的是去除他们认为“不安全”的东西。这是为什么?他们为什么不默认逃避而不是删除?我是否应该按照
的方式预留黑客var encoded = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode("string content");
var encodedWithSafeTagsReenabled = encoded.Replace("<strong>", "<strong>");
2016年在.NET生态系统中有更清晰,更强大的方法吗?再次,尊重标签的白色列表并保留(编码,而不是删除)其他所有内容?
*为了澄清,这将用于将内容放置在网页上的特定div中(我知道编码应该基于OWASP XSS备忘单依赖于上下文。)
答案 0 :(得分:0)
删除当然是最安全的选择。如果我们只对它进行html编码,那么如果有其他地方存在XSS错误,它可能是非htmlencoded。
例如这个jQuery脚本:
var searchText = searchstring.text();
if(noResults)
{
$("div.noResults").html("no results found for <b>" + searchText + "</b>"); //boom
}
2016年在.NET生态系统中有更清晰,更强大的方法吗?再次,尊重标签的白色列表并保留(编码,而不是删除)其他所有内容?
您可以使用HtmlSanitizer(NuGet)库执行此操作并使用RemovingTag
事件:
var sanitizer = new HtmlSanitizer();
sanitizer.RemovingTag += (sender, args) =>
{
var tag = args.Tag;
args.Cancel = true;
tag.OuterHtml = WebUtility.HtmlEncode(tag.OuterHtml);
};