2011-07-13 22 views
0

我有一個使用ASP.NET使用MVC框架版本2.0和實體框架構建的Intranet網站。XSS是ASP.NET MVC2和HTML文本框的問題嗎?

我感興趣的數據位之一是Notes。它以類型文本形式存儲在數據庫中。它使用實體框架保存和加載。它僅在文本框輸入中顯示在網頁上。數據根本不在服務器上使用。

所以問題是如果我關閉服務器上的驗證,這是否會造成XSS危險。在將它放入文本框輸入之前,我需要擔心編碼註釋。

評論1

我只使用.NET 3.5。我祈禱,一旦我離開Visual Studio 2008,將來會更新它;)

以下是我如何在網頁上放置註釋。

<%= Html.TextArea("Notes", null, new { rows = "10", style = "width:100%" }) %> 

以上是Notes放入網頁的唯一方法。在服務器上,我做這樣的事情(我離開了那裏聲明):

var myStruct = (from u in myDB.dbSomeStruct 
       select u).FirstOrDefault(); 
myStruct.Notes = Notes; 
myDB.SaveChanges(); 

回答

1

XSS真的可以歸結爲編碼輸出,即你從服務器發送出什麼到頁面上。

暫時不考慮其他類型的注入攻擊(例如SQL注入),用戶可以向您發送任何惡意製作的輸入。現在,我不建議以編碼形式存儲該輸入,因爲您可能想要對其進行其他操作(如將其放入網絡以外的其他介質中)。但是,當您發送該輸入作爲對網絡請求的迴應時,請確保您對其進行編碼。可能是唯一可以在響應中看到輸入的用戶是第一位提供輸入的原始用戶,在這種情況下,您可能認爲編碼它不是必需的。我會建議編碼它作爲一種標準的方法,因爲你永遠不知道什麼時候應用程序功能可能會改變,其他用戶現在可以看到輸入,然後突然間,你有一個潛在的XSS利用!

因此,上述處理來自您的系統的輸入。來自任何其他系統的輸入也是如此; 始終對其進行編碼。來自任何其他來源的數據不是您自己明確創建的數據,都不可信。我認爲從這個角度來看,減輕XSS是一個好的開始。

如果您在.NET 4上使用MVC 2,則使用<%: Data %>將HTML編碼爲Data,使用default encoder。如果你不使用.NET 4,那麼你需要使用<%= Html.Encode(Data) %>

+0

如果輸出要放在文本框中,數據是否需要編碼?或者當它被塞進一個文本框時它可以被編碼? –