2011-07-06 95 views
19

我試圖啓用視圖狀態加密始終將作爲我在IIS6中託管的ASP.NET 3.5網站的安全措施。我們關閉了viewstate,但仍然在此字符串中看到一些「控制狀態」。在測試環境中,我可以簡單地設置在web.config中的以下內容,我再也不能解碼的base64的視圖狀態到半明文:asp.net viewstate加密問題

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

我甚至增加了以下(由machine key generater genereated)到machine.config中,仍然加密我的測試服務器上的視圖狀態罰款:

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

我非測試環境似乎並沒有拿起上述變化,因爲我總是能的base64解碼的視圖狀態,以純文本與上面的設置。我做任何改變後,我總是喜歡。

我的非測試Web服務器的一些信息:

  • Web場/負載平衡(但只有一臺服務器以進行測試現在)
  • SQL會話狀態(最初需要在machine.config中的machineKey設置此)
  • 的machine.config:部署的零售=「真」

任何人都可以建議去哪裏尋找可能與asp.net視圖狀態加密干擾其他設置?

編輯︰現在在我的iis測試服務器上我無法撤消viewStateEncryptionMode設置,因爲它是加密視圖狀態,即使當我將其設置爲「從不」,我的其他網站似乎沒有采取持有這種設置。我可以在哪裏查看該屬性被覆蓋的位置?有沒有任何緩存存儲這個設置,除了當我iisreset /停止www服務/ touch machine.config時會做什麼需要清除?

編輯最終:經過幾天的學習配置文件,我放棄了並通過代碼實現了這一點。我已經有一個安全模塊附加到頁面事件,所以在Page_Load中我添加了:Page.RegisterRequiresViewStateEncryption();

我真的很想知道是什麼阻止了這個設置從IIS6 immediatley中獲取。當我在本地運行cassini時,如果通過頁面節點將viewStateEncryptionMode設置爲「Always」,我會立即看到它對viewstate進行編碼並呈現id =「__ VIEWSTATEENCRYPTED」的額外隱藏字段。當我將它設置爲「從不」時,我會立即看到加密關閉。如果我在我的IIS6託管網站上對網站進行相同的確切更改,它將不會立即生效,但如果我允許該設置停留在那裏,它最終會得到保留。我會停止/啓動www服務,重置IIS,清除ASPNET臨時緩存,但我不知道還有什麼要嘗試?希望這篇文章能夠ROT一段時間,未來有人會看到我經歷過的相同行爲,我們可以進一步弄清楚這一點!

+5

原來,RegisterRequiresViewStateEncryption也打開ViewstateMAC驗證,即使我明確地在我的web.config中設置爲false。由於我的網站是一個自定義的「MVC」,位於WebForms之上,我有時在POSTS上重定向到不同的頁面,我無法進行MAC驗證。我在想,我的ViewStateMAC = false和ViewStateEncryption = true的web.config設置不是一個好的組合。 – felickz

回答

2

我知道你已經有一段時間了,但你有沒有考慮過自己實現PageStatePersister? PageStatePersister是負責格式化嵌入在頁面中的ViewState和ControlState數據的組件。如果安全性是您最關心的問題,您可以使用任何您想要的加密算法來確保您的數據保持私密。根據你的配置,這聽起來像你在一個相當有能力的環境中,所以顯然首先進行負載測試。另外值得一提的是,當我將MVC分層介入到「經典」ASP.NET WebForms站點時,我不知道MVC是否涉及ViewState。

祝你好運。

+0

感謝您的建議。我從來沒有探索過這條路線,因爲我將Viewstate放在會話中,所以我忽略了滾動自己的PageStatePersister所導致的所有問題。如果我打開它,我肯定會探討你自己加密會話的想法。 – felickz

0

我的猜測是在負載平衡的Web場是混亂的根源。您聲明只有「現在只有一臺服務器正在測試」,但是您所遇到的所有症狀與網絡服務器場中的多個服務器正在運行時會發生的情況完全相同,但您只是將web.config並在一臺服務器上更改machine.config。當您使用瀏覽器訪問網站時,有時候您會遇到一種配置爲單向的服務器,有時您會碰到另一種配置爲另一種方式的服務器。

+0

在我玩這個遊戲的那個星期裏,這個想法多次傳遍了我的腦海。我不斷地檢查了這一點,當挫折轉移到我的開發服務器,這是不負載平衡。但是你確實有一個有效的觀點,對於負載平衡的環境中的每個人都很重要 – felickz