5

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

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

如果@description 的值为:我看到它在title<img src=x onerror=alert(/XSS/.source)>属性 中像这样显示并因此执行,而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>
4

1 回答 1

0

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

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

于 2012-07-06T21:47:07.920 回答