与此
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页面时(ASP.NET 4或更高版本中的新增功能).在这种情况下,ASP.NET引擎将为您自动HtmlEncode常规字符串(或任何不实现IHtmlString的字符串),而MvcHtmlString将以逐字/未编码的形式发送到页面中.
即我认为文件是错误的.有一个connect ticket在HtmlString构造函数文档中有相同的错误,他们确实修复了它. (我以为我提出了这样的说法: – /或许我的关闭是别人的副本?)我没有注意到MvcHtmlString文档也是错误的.