与此相关的question,我在ASP.NET MVC项目中处理XSS问题,并且对MvcHtmlSTring.ToHtmlString()方法感到困惑。从documentation“返回代表当前对象的HTML编码字符串。”,但在我的情况下不起作用:

    var mvcHtmlString = MvcHtmlString.Create("<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">").ToHtmlString();

    var encoded = HttpUtility.HtmlEncode("<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">");

mvcHtmlString的输出
<SCRIPT/XSS SRC="htpp://ha.ckers.org/css.js">

编码的输出
&lt;SCRIPT/XSS SRC=&quot;htpp://ha.ckers.org/css.js&quot;&gt;

我错过了什么?

最佳答案

MvcHtmlString(或HtmlString或任何实现IHtmlString的东西)用于应以HTML逐字记录的字符串-即,通过使MvcHtmlString告诉您实际上需要这些HTML标记。

区别在于,当您使用<%: .. %>(在ASP.NET 4或更高版本中是新增功能)将字符串发射到ASP.NET页中时。在这种情况下,ASP.NET引擎将自动为您(或未实现IHtmlString的任何内容)使用HtmlEncode常规字符串,而MvcHtmlString将逐字显示/未编码。

即我认为文档是错误的。他们确实修复了HtmlString构造函数文档中的connect ticket,并带有同等错误。 (我以为我提出了:-/也许我的文件被关闭了,作为其他人的副本?)我也没有注意到MvcHtmlString文档也是错误的。

关于asp.net - MvcHtmlString.ToHtmlString()不编码HTML?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9802144/

10-14 04:28