2012-07-06 93 views
4

我有以下的HTML頁面.cshtml它:HTML屬性編碼

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

如果@description的值是:<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> 
+2

請向我們展示生成的源代碼。這不應該發生。 – SLaks 2012-07-06 18:53:53

+0

這確實看起來不正確。儘管如此,我有點不知所措。剃刀應該對兩種情況進行相同的編碼。我會嘗試獲得repro時,我可以。如果你可以縮小一個相當簡單的樣本,請將它發送給Microsoft microsoft DOT com,我會仔細研究它。不管您是否可以縮小樣本,請不要猶豫與我聯繫。 – 2012-07-07 01:37:15

回答

0

它看起來像什麼,你現在看到的是一個基於上下文不同的編碼。 HTML標籤所需的輸出編碼與HTML屬性不同,因爲它對JavaScript不同,對於CSS又不同。

話雖如此,我無法用乾淨的MVC4項目重現此行爲。你使用什麼版本?

+0

我正在使用MVC3。我猜測默認編碼可能不適用於屬性?否則,它可能與我獲取數據的方式有關......我試圖繞過.net ValidateRequest,因此@description的值實際上是通過應用程序中的文件上傳工具添加到數據庫中的。 (我還沒有查看該代碼) – Trynity 2012-07-06 22:41:27