与此相关的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">
编码的输出
<SCRIPT/XSS SRC="htpp://ha.ckers.org/css.js">
我错过了什么?
最佳答案
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/