【问题标题】:HTML attribute encodingHTML 属性编码
【发布时间】:2012-07-07 06:10:32
【问题描述】:

我有一个 .cshtml 页面,其中包含以下 HTML:

<div class="content rowBody">
       <span class="rowText" title="@description">                           
              @description                           
       </span>
</div>

如果@description 的值为:&lt;img src=x onerror=alert(/XSS/.source)&gt; 我看到它在 title 属性中像这样显示并因此执行,而 span 标记之间的那个似乎已编码并且不会触发警报框。

我的假设是 Razor 引擎视图尝试对任何以 @ 开头的内容进行编码。这不适用于 HTML 属性吗?

生成的来源:

<div style="margin-left: 31px;" class="content rowBody unselectable" unselectable="on">
                        <span class="rowText unselectable" title="<img src=x onerror=alert(/XSS/.source)>" unselectable="on">                           
                            &lt;img src=x onerror=alert(/XSS/.source)&gt;                           
                        </span>
                    </div>

【问题讨论】:

  • 请向我们展示生成的源代码。那不应该发生。
  • 这看起来确实不正确。不过,我有点不知所措。 Razor 应该对两种情况进行相同的编码。我会尽量得到一个复制品。如果您可以缩小一个相当简单的示例,请将其发送到 anurse AT microsoft DOT com,我会调查它。无论您是否可以缩小样本范围,请随时与我联系。

标签: html asp.net-mvc-3 encoding razor xss


【解决方案1】:

您在这里看到的似乎是基于上下文的不同编码。 HTML 标记所需的输出编码与 HTML 属性不同,因为它对于 JavaScript 和 CSS 不同。

话虽如此,但我无法使用干净的 MVC4 项目重现此行为。你用的是什么版本?

【讨论】:

  • 我正在使用 MVC3。我猜默认编码可能不适用于属性?否则,它可能与我获取数据的方式有关......我试图绕过.net ValidateRequest,因此@description 的值实际上是通过应用程序内的文件上传工具添加到数据库中的。 (我还没有审查该代码)
猜你喜欢
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多