2012-12-27 25 views
4

我目前正在修復我們的ASP.net網站應用程序中的一些安全問題。EnableViewStateMAC = true對於ASP.Net網站中的ViewStateEncryption是否強制?

其中一個問題是ViewState未加密。

所以我確實檢查了StackOverFlow和其他地方如何加密viewState,並且我使用<pages viewStateEncryptionMode="Always" />並在Web.config中添加了像這樣的<machineKey validation="3DES" />這樣的3DES機器鍵。

我想知道"EnableViewStateMAC=true"也是強制性的必要嗎?,因爲這是我在網上找到的一些建議解決方案中提到的。 但是,在我的支票上,我發現即使沒有這個,加密也可以正常工作。

[注:我從做個人網頁的變化做這些改變在應用程序級別(Web.config文件)是該應用不是一個可行的解決方案]

+0

如果你要加密你的ViewState,最好MAC地址,以檢測攻擊者篡改數據。單獨加密並不能提供消息的完整性。 – mfanto

回答

0

這會是問題,當你主機多服務器。由於機器密鑰不同。

如果您的項目在單臺機器上運行。 EnableViewStateMAC = true是安全的。

使用enableViewStateMac要求將連續請求轉發到同一服務器(即服務器關聯)。此功能用於幫助防止篡改頁面的視圖狀態;但是,它基於當前服務器上的自動生成的驗證密鑰。從該密鑰生成消息認證碼(MAC)並將其在ViewState中發送回瀏覽器。問題是,如果POST後臺執行並轉到其他服務器,您將收到一條很好的小錯誤消息,指出「Corrupt View State」。

要解決此問題,您可以在元素中將enableViewStateMac設置爲false,或者在所有服務器(場中)的元素中爲validationKey屬性指定一個公共值。

順便說一句,文檔說默認情況下這是關閉的。這是不正確的!去檢查machine.config!

+0

嗨halit, 感謝您的答覆。 我想知道的是,如果我絕對有必要使用EnableViewStateMAC = true?或者不是上面的變化,我已經做了足夠的加密我的viewState? 我不希望EnableViewStateMAC如果沒有必要。 – Tx36

+0

你會決定。如果你沒有啓用它。 ThirdParty工具可以解碼。你的viewSate。 http://ignatu.co.uk/ViewStateDecoder.aspx – halit

+0

Ex。如果您存儲包含視圖狀態密碼的用戶列表。他們可以解碼並查看密碼。 – halit

17

即使啓用加密,也不要將EnableViewStateMac設置爲false。 MAC保證客戶端不能惡意地篡改ViewState的內容。 (加密本身不足以保證這一點; MAC是必要的。)

EnableViewStateMac屬性將在產品的未來版本中被刪除,因爲沒有正當理由將其設置爲'false'。

+0

如果您將ViewState保留到數據庫以便只有ID傳遞給客戶端並且無法查看ViewState,該怎麼辦? – Lloyd

+4

沒關係。 EnableViewStateMac保護的不僅僅是ViewState,所以它不應該被設置爲false。這條規定沒有例外。 – Levi

+2

And ... 10個月後@Levi剛剛在Twitter上宣佈,即使您將其設置爲false,它也會被忽略。就像Levi說的那樣,沒有例外,現在如果你的代碼依賴於這個,它就會中斷。 :) –

相關問題