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

ASP.NET 自訂伺服器控制項安全性指南:開發與使用最佳實踐

     編輯:關於ASP.NET

安全性雙重視角

自訂伺服器控制項安全性包含兩面:

  1. 控制項開發者:編寫安全的程式碼,避免引入漏洞。
  2. 控制項使用者:安全地引入第三方控制項,防止供應鏈攻擊。

給控制項使用者的準則

  • 來源驗證:優先選擇強名稱簽署、知名廠商、開源且活躍維護的元件。檢查 NuGet 套件下載數、Issue 處理速度。
  • 設計時安全:設計時期控制項也會在 Visual Studio 進程中執行代碼,惡意設計器可竊取專案資訊。限制只載入受信任元件。
  • 最小權限原則:ASP.NET 應用程式池身分僅授予必要權限 (檔案、資料庫、登錄)。
  • 代碼存取安全 (CAS):.NET Framework 透過 `trustLevel`、`` 限制元件權限 (如禁止 `FileIOPermission`、`ReflectionPermission`)。
  • ACL 檢查:確保 `App_Data`、`Bin`、上傳目錄等 ACL 僅授予應用程式池身分必要權限。
  • 定期更新與掃描:使用 SCA 工具 (OWASP Dependency-Check、GitHub Dependabot、Snyk) 掃描已知漏洞 (CVE)。

給控制項開發者的準則

1. 輸入驗證與輸出編碼

  • 所有公開屬性、方法參數、回發資料視為不可信,嚴格驗證 (型別、長度、格式、範圍)。
  • 輸出 HTML 時使用 `HttpUtility.HtmlEncode`、`HtmlAttributeEncode`、`JavaScriptStringEncode` 防 XSS。
  • 避免直接輸出使用者輸入至 `Script`、`Style`、`href`、`src` 等危險語境。

2. ViewState 與 ControlState 保護

  • 敏感資料勿存入 ViewState (Base64 可解碼)。
  • 啟用 `ViewStateMac="true"` (預設)、`ViewStateEncryptionMode="Auto"`。
  • 自訂 `IStateManager` 實作時,序列化前加密敏感欄位。

3. 事件驗證

  • 支援 `EnableEventValidation="true"`,確保回發事件來源合法。
  • 動態產生控制項時,正確註冊 `Page.ClientScript.RegisterForEventValidation`。

4. 腳本與資源管理

  • 內嵌 JavaScript/CSS 使用 `WebResource.axd` / `ScriptResource.axd`,設定 `PerformSubstitution=false` 防資訊洩漏。
  • 避免內聯 `onclick="..."` 等事件屬性,改用 `addEventListener` 或 MS AJAX `$addHandler`。

5. 部分信任相容性

  • 標記 `[assembly: AllowPartiallyTrustedCallers]` (APTCA) 僅在確認代碼安全後使用。
  • 避免 `Assert` 提權、Reflection 呼叫私有成員、P/Invoke、檔案系統存取等需 Full Trust 的操作。
  • 提供「安全模式」關閉高風險功能 (如動態編譯、檔案上傳)。

部署與環境強化

  • GAC 安裝強名稱組件:`gacutil /i MyControl.dll`,確保版本隔離。
  • 使用 `Mscorcfg.msc` (NET Framework 設定工具) 調整程式碼群組權限集。
  • 啟用 IIS Request Filtering:封鎖可疑副檔名、限制請求長度、URL 序列。
  • Web 應用程式防火牆 (WAF) 規則針對控制項特定參數 (如 `__VIEWSTATE`、回調參數) 進行檢測。

總結

自訂控制項擴展了攻擊面,安全性必須貫穿「開發 → 封裝 → 分發 → 部署 → 運行」全生命週期。開發者遵循 SDL (Security Development Lifecycle),使用者實施供應鏈風險管理,雙向夾擊才能構建可信賴的元件生態。

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