首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

安全簡報:ASP.NET ViewState 安全威脅與防禦

     編輯:關於ASP.NET

前言

ViewState 是 ASP.NET 維護頁面狀態的機制,儲存於隱藏欄位 __VIEWSTATE。許多開發者誤以為其已加密,實則僅 Base64 編碼,極易遭竄改與資訊洩露。本文依 STRIDE 模型分析威脅並示範內建防禦用法。

威脅一:資訊洩露

ViewState 內容可輕易反序列化:

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

除錯器可見明文密碼 swordfish 等敏感資料。線上解碼工具 (如 Fritz Onion ViewState Decoder) 更降低攻擊門檻。

威脅二:竄改導致權限提升

攻擊者修改 ViewState 中的角色、權限欄位,重新計算 MAC (若啟用) 或直接送出(若未啟用),可能繞過授權檢查。

ASP.NET 內建防禦

  1. 啟用 ViewState MAC:<pages enableViewStateMac="true" /> (預設開啟),驗證完整性。
  2. 加密 ViewState:<pages viewStateEncryptionMode="Always" />,防止竊閱。
  3. 機器金鑰管理:<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" />,Web Farm 需同步金鑰。
  4. 敏感資料勿存 ViewState:改用 Session、加密 Cookie 或 Server-side 狀態。

最佳實務

  • 預設啟用 MAC,生產環境強制加密。
  • 定期輪換 machineKey,避免金鑰洩露長期有效。
  • 程式碼審查掃描 ViewState[...] = 寫入敏感資料的情形。

總結

ViewState 便利但危險。正確配置 enableViewStateMac、viewStateEncryptionMode 與 machineKey,並避免存放敏感資訊,是 ASP.NET 應用安全的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved