首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MvcHtmlString.ToHtmlString()不编码HTML?

MvcHtmlString.ToHtmlString()不编码HTML?
EN

Stack Overflow用户
提问于 2012-03-21 17:54:20
回答 2查看 13.4K关注 0票数 8

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

代码语言:javascript
复制
    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的输出

代码语言:javascript
复制
<SCRIPT/XSS SRC="htpp://ha.ckers.org/css.js">

encoded <的输出--这是我怀疑的行为!

代码语言:javascript
复制
&lt;SCRIPT/XSS SRC=&quot;htpp://ha.ckers.org/css.js&quot;&gt;

我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 17:57:39

MvcHtmlString (或HtmlString,或任何实现IHtmlString的东西)是用于应该以HTML逐字形式发出的字符串-也就是说,通过将其设置为MvcHtmlString,您告诉它您实际上需要那些HTML标记。

不同之处在于当您使用<%: .. %> ( ASP.NET 4或更高版本中的新功能)将字符串发送到ASP.NET页面时。在这种情况下,ASP.NET引擎将自动为您HtmlEncode常规字符串(或任何未实现IHtmlString的字符串),而MvcHtmlString将逐字/未编码地发送到页面中。

也就是说,我认为文档是错误的。在HtmlString构造函数文档中有一个具有等效错误的connect ticket,他们确实修复了该错误。(我想我已经提交了:-/也许我的被关闭了,因为我的是别人的复制品?)我也没有注意到MvcHtmlString文档是错误的。

票数 11
EN

Stack Overflow用户

发布于 2012-03-23 01:21:52

MSDN文档是正确的,但可能有点混乱。MvcHtmlStringIHtmlString接口用于表示已经经过HTML编码的字符串。MSDN说:

返回表示当前对象的HTML编码的字符串。

您传递给MvcHtmlString对象的对象已经是超文本标记语言编码的,所以.ToString().ToHtmlString()只返回您传递的对象。

请注意,MSDN文档明确规定:

ToHtmlString和ToString方法返回相同的值。

那么为什么会有这一切呢?有两个原因:

  1. 在Razor视图引擎和Web v4中,实现IHtmlString的对象被写出为原始数据。视图引擎假设创建IHtmlString的人已经清理了数据。
  2. IHtmlString有它自己的stringify方法,所以它不需要和ToString()有相同的实现。虽然ToHtmlString()必须返回超文本标记语言,但是您可以很容易地想象ToString()可能会返回一些开发人员友好的调试information.
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9802144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档