Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NET中的选择性HTML编码(除了某些标记以外的所有内容)?_Html_Asp.net_Asp.net Mvc_Xss_Html Sanitizing - Fatal编程技术网

NET中的选择性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

我需要在网页上显示一个字符串内容(我无法控制)。除了某些数量有限的HTML标记(strong、em、p、br),所有内容都应按原样显示。这些应该得到尊重,我的理解是,让他们不找替罪羊是安全的。其他所有内容都应按原样显示

令人惊讶的是,大多数的HTML消毒剂都是侵入性的,因为他们倾向于去除他们认为不安全的东西。为什么呢?为什么他们不默认逃跑而不是移除?我是不是应该保留一个关于

var encoded = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode("string content");
var encodedWithSafeTagsReenabled = encoded.Replace("&lt;strong&gt;", "<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的库都选择第二条路径,这意味着它们必须依靠标准来构建对象图。这进一步意味着任何不符合这些标准(无效)的东西都必须被丢弃或以其他方式处理。