NET中的选择性HTML编码(除了某些标记以外的所有内容)?
我需要在网页上显示一个字符串内容(我无法控制)。除了某些数量有限的HTML标记(strong、em、p、br),所有内容都应按原样显示。这些应该得到尊重,我的理解是,让他们不找替罪羊是安全的。其他所有内容都应按原样显示 令人惊讶的是,大多数的HTML消毒剂都是侵入性的,因为他们倾向于去除他们认为不安全的东西。为什么呢?为什么他们不默认逃跑而不是移除?我是不是应该保留一个关于NET中的选择性HTML编码(除了某些标记以外的所有内容)?,html,asp.net,asp.net-mvc,xss,html-sanitizing,Html,Asp.net,Asp.net Mvc,Xss,Html Sanitizing,我需要在网页上显示一个字符串内容(我无法控制)。除了某些数量有限的HTML标记(strong、em、p、br),所有内容都应按原样显示。这些应该得到尊重,我的理解是,让他们不找替罪羊是安全的。其他所有内容都应按原样显示 令人惊讶的是,大多数的HTML消毒剂都是侵入性的,因为他们倾向于去除他们认为不安全的东西。为什么呢?为什么他们不默认逃跑而不是移除?我是不是应该保留一个关于 var encoded = System.Web.Security.AntiXss.AntiXssEncoder.Html
var encoded = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode("string content");
var encodedWithSafeTagsReenabled = encoded.Replace("<strong>", "<strong>");
var encoded=System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(“字符串内容”);
var encodedwithsafetagsreeEnabled=encoded.Replace(“强”),“”;
2016年,在.NET生态系统中是否有一种更干净、更稳健的方法来实现这一点?再次强调,尊重标签的白名单,并保留(编码,而不是删除)其他所有内容
*为了澄清,这将用于将内容放置在网页上的特定div中(我知道编码应根据OWASP XSS备忘单的上下文而定)。删除当然是最安全的选择。如果我们只对它进行html编码,那么如果在其他地方有XSS错误,它可能是非html编码的 例如,此jQuery脚本:
var searchText = searchstring.text();
if(noResults)
{
$("div.noResults").html("no results found for <b>" + searchText + "</b>"); //boom
}
大多数HTML清理程序依赖于实际构建文档模型和处理节点,而不是试图破坏字符串。因此,必须删除或以其他方式“修复”无效HTML,否则构建文档模型将失败。谢谢,明白了。它们构建DOM或其他什么,但我的问题是,为什么它们在最后转储到字符串时不默认编码?为什么它们必须侵入并移除?如果内容甚至不是有效的DOM怎么办?我要求他们清理html输出的任意字符串(而不是检查html的有效性)。在处理类似HTML的内容时,您要么1)使用正则表达式,这很昂贵且容易出错;要么2)构造某种内存中的基于类的表示来进行修改,然后将其展平为字符串。大多数使用HTML的库都选择第二条路径,这意味着它们必须依靠标准来构建对象图。这进一步意味着任何不符合这些标准(无效)的东西都必须被丢弃或以其他方式处理。