程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 安全簡報: 視圖狀態安全

安全簡報: 視圖狀態安全

編輯:關於ASP.NET

在 Web 應用程序中有效管理用戶狀態需要在性能、可擴展性、可維護性和安全性之間取得精妙的平衡 。在管理客戶端上儲存的用戶狀態時,安全考慮就顯得額外重要。我的一個同事曾經說過,處理客戶端的 狀態數據就像把蛋筒冰激淋交給一個 5 歲的孩子:您可以把冰激淋拿回來,但是您絕對不能期望拿回來 的時候冰激淋的形狀還像給出去的時候一樣!

在這個月的專欄中,我們會圍繞 ASP.NET 應用程序中的客戶端狀態管理來探討一些安全隱患,特別會 關注視圖狀態安全。(請注意:本文假設您熟悉有關 ASP.NET 視圖狀態的概念。)。

如果您認為應用程序的視圖狀態中存儲的任何數據都不值得保護,請再仔細考慮一下。敏感信息甚至 會在您尚未察覺的時候進入視圖狀態中。即使您非常警惕,采取了防止敏感信息通過視圖狀態丟失的措施 ,攻擊者仍然能夠篡改視圖狀態,甚至會給您和您的用戶帶來更大的麻煩。幸運的是,ASP.NET 帶有一些 內置的防御組件,用於防御這些攻擊。讓我們看看如何正確使用這些防御組件。

威脅 1:信息洩露

在 Microsoft,開發團隊使用 STRIDE 模式對威脅進行分類。STRIDE 是首字母縮寫,分別代表:

假冒

篡改

否認

信息洩露

拒絕服務

提升權限

視圖狀態安全所涉及到的兩個主要 STRIDE 類別是信息洩露和篡改(成功的篡改攻擊可能會導致提升 權限,我們會在後面詳細進行討論)。信息洩露是這些威脅中比較容易說明的,因此我們就先從它開始討 論。

有關視圖狀態的一個最令人遺憾、最常見的誤解就是,它經過了加密或其他方式處理,無法被用戶讀 取。畢竟,視圖狀態字符串看起來肯定不是可分解的:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  value="/wEPDwULLTE2MTY2ODcyMjkPFgIeCHBhc3N3b3JkBQlzd29yZGZpc2hkZA==" />

然而,這個字符串只是 base64 編碼的,沒有采用任何強大的密碼算法。我們能夠通過受限對象序列 化 (LOS) 格式化程序類 System.Web.UI.LosFormatter 輕松對該字符串進行解碼和反序列化:

LosFormatter formatter = new LosFormatter();
object viewstateObj = formatter.Deserialize ("/wEPDwULLTE2MTY2ODcyMjkPFgIeCHBhc3N3b3JkBQlzd29yZGZpc2hkZA==");

快速看一下調試器(請參見圖 1),就能發現反序列化的視圖狀態對象實際上是一系列 System.Web.UI.Pair 對象,以包含值“password”和相應字符串值“swordfish”的 System.Web.UI.IndexedString 對象結尾。

圖 1 調試器揭示的秘密視圖狀態數據

如果您不打算自己去費勁編寫代碼來反序列化視圖狀態對象,Internet 上有幾種很好用的視圖狀態解 碼器可供免費下載,包括 Fritz Onion 的 ViewState Decoder 工具,網址為: alt.pluralsight.com/tools.aspx。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved