Asp.net

asp.net viewstate 加密問題

  • July 6, 2011

我試圖打開視圖狀態加密始終作為我在 IIS6 中託管的 ASP.NET 3.5 網站的安全措施。我們關閉了視圖狀態,但仍然在此字元串中看到一些“控制狀態”。在測試環境中,我可以簡單地在 web.config 中設置以下內容,並且我不能再將視圖狀態通過 base64 解碼為半明文:

<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">

我什至在 machine.config 中添加了以下內容(由機器密鑰生成器生成),並且仍然在我的測試伺服器上很好地加密了視圖狀態:

<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />

我的非測試環境似乎沒有接受上述更改,因為我總是可以使用上述設置將視圖狀態 base64 解碼為純文字。在我進行任何更改後,我總是 iisreset。

關於我的非測試網路伺服器的一些資訊:

  • 網路場/負載平衡(但目前只有一台伺服器可供測試)
  • Sql 會話狀態(最初需要 machine.config 中的 machinekey 來設置它)
  • machine.config:部署零售=“真”

誰能建議在哪裡尋找可能會干擾 asp.net viewstate 加密的其他設置?

編輯:現在在我的 iis 測試伺服器上,我無法撤消 viewStateEncryptionMode 設置,因為它正在加密視圖狀態,即使我將其設置為“從不”並且我的其他網站似乎都沒有使用此設置。我在哪裡可以查看該屬性被覆蓋的位置?除了在我 iisreset/stop www service/touch machine.config 時要做的事情之外,是否還有需要清除此設置的記憶體?

編輯最後:經過幾天的研究配置文件,我放棄並通過程式碼實現了這個。我已經有一個附加到頁面事件的安全模組,所以在 Page_Load 我添加了: Page.RegisterRequiresViewStateEncryption();

我真的很想知道是什麼阻止了這個設置在 IIS6 上立即被選中。當我在本地執行 cassini 時,如果我通過頁面節點將 viewStateEncryptionMode 設置為“始終”,我會立即看到它對視圖狀態進行編碼並使用 id="__VIEWSTATEENCRYPTED" 呈現附加隱藏欄位。當我將其設置為“從不”時,我會立即看到加密關閉。如果我在我的 IIS6 託管網站上對網站進行完全相同的更改,它不會立即生效,但如果我允許設置保留在那裡,它最終會生效。我會停止/啟動 www 服務,重置 iis,清除 ASPNET 臨時記憶體,但我不這樣做 不知道還能嘗試什麼?希望這篇文章可以腐爛一段時間,將來有人會看到我經歷過的相同行為,我們可以進一步解決這個問題!

Web.config 頁面設置不適用於禁用可更新選項的預編譯 ASP.Net 應用程序。已經有一段時間了,但我可能已經部署了我的測試伺服器,但禁用了可更新選項……吸取了教訓。

MSDN

我問了類似的問題,同樣的問題。

我知道您發布此內容已經有一段時間了,但是您是否考慮過自己實現 PageStatePersister?PageStatePersister 是負責格式化嵌入在頁面中的 ViewState 和 ControlState 數據的組件。如果安全是您最關心的問題,您可以使用任何您想要的加密算法來確保您的數據保持私密。根據您的配置,聽起來您處於一個相當有能力的環境中,因此顯然首先進行負載測試。還值得一提的是,當 MVC 被合併到“經典”ASP.NET WebForms 站點中時,我不知道或體驗過 MVC 對 ViewState 的分層參與。

祝你好運。

引用自:https://stackoverflow.com/questions/6598199