[研究]GCB,IIS,\system.web\trust\level 變更影響?
2025-11-12
政府組態基準(Government Configuration Baseline,簡稱GCB)
TWGCB-04-014_Microsoft IIS 10政府組態基準說明文件v1.1_1141002
https://www.nics.nat.gov.tw/core_business/cybersecurity_defense/GCB/GCB_Documentation/
IIS 管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\trust\level
預設 Full,GCB建議 Medium、Low 或 Minimal,不相符。
改成 Medium、Low 或 Minimal 會導致甚麼功能異常 ?
此值儲存於 Web.Config 嗎 ? Web.Config 有相對應值 ?
系統更新程式碼 (含 Web.Config) 後,此值會從新自 Web.Config 讀取?
********************************************************************************
ChatGPT
🧩 一、設定位置與作用
在 IIS 管理員 → 設定編輯器 → system.web → trust → level
對應到 Web.config 中的設定如下:
|
<configuration>
<system.web>
<trust level="Full" originUrl="" />
</system.web>
</configuration>
|
此設定主要是 ASP.NET 部分信任 (Partial Trust) 模型的一部分,用來限制應用程式能執行的 .NET Framework 權限。
⚙️ 二、各層級說明
| 層級 | 權限範圍 | 備註 |
|---|---|---|
| Full (預設) | 完整信任,應用程式可執行所有 .NET Framework API 與檔案/登錄/網路操作 | 最相容但最不安全 |
| High | 接近完整信任,但限制部分敏感 API | 少見 |
| Medium | 禁止部分 I/O、反射、網路等高風險操作 | 常造成應用程式相容性問題 |
| Low / Minimal | 幾乎無法存取檔案、登錄、網路、環境變數等 | 嚴格安全,但幾乎無法運行一般 ASP.NET 應用程式 |
⚠️ 三、改為 High、Medium、Low、Minimal 可能造成的功能異常
🟦 1️⃣ trust level="High" 可能異常
此層級比 Full 稍弱,禁止部分反射與跨組件存取。
| 類別 | 可能異常現象 | 錯誤訊息/行為 |
|---|---|---|
| 反射與動態載入 | 某些使用 Reflection.Emit 或 Assembly.LoadFrom() 的模組無法載入 |
System.Security.SecurityException: Request for the permission of type 'SecurityPermission' failed. |
| 第三方套件 | 一些需要存取私有成員或內部屬性的 NuGet 套件出錯 | 例:PDF 產生、ORM、報表元件 |
| 跨組件呼叫 | 嘗試調用未標註 [AllowPartiallyTrustedCallers] 的組件時失敗 |
That assembly does not allow partially trusted callers. |
| Windows API 或 COM Interop | 無法調用 COM 物件或 Win32 API | PlatformNotSupportedException |
🟩 2️⃣ trust level="Medium" 可能異常
此層級限制檔案、登錄、網路、環境變數、反射等權限,為最常見的「報錯層級」。
| 類別 | 可能異常現象 | 錯誤訊息/行為 |
|---|---|---|
| 檔案 I/O | 無法讀取或寫入 App_Data 外部檔案 |
System.Security.SecurityException: Request for the permission of type 'FileIOPermission' failed. |
| 反射/動態程式碼 | 不能建立動態組件或存取私有成員 | MethodAccessException、SecurityException |
| Session / ViewState | 使用 SessionStateMode=SQLServer 或 StateServer 可能失敗 |
例:SecurityException during serialization |
| 資料庫連線 | 驅動程式需要存取環境變數(例如連線字串),導致拒絕存取 | SqlClient 無法開啟連線 |
| 第三方函式庫 | 任何需檔案存取、暫存檔或動態編譯的套件將出錯 | 例:DotNetZip、Spire、NPOI |
| 郵件發送 | System.Net.Mail.SmtpClient 拒絕使用網路 |
SecurityException: The request for permission of type 'WebPermission' failed. |
🔸整體評估: 幾乎所有實際運作中的 ASP.NET 網站都會在此層級出錯,除非是純靜態或展示型頁面。
🟨 3️⃣ trust level="Low" 可能異常
進一步限制網路、登錄、檔案、反射、環境變數與 Thread 操作。
| 類別 | 可能異常現象 | 錯誤訊息/行為 |
|---|---|---|
| 任何 I/O 操作 | 檔案、登錄、網路全部被禁止 | SecurityException |
| 第三方程式庫 | 幾乎所有使用 System.IO、System.Net 的函式庫失效 | 無法載入或直接例外中止 |
| 伺服端控制項 | 某些 ASP.NET 控制項需寫入暫存檔 (如 GridView 匯出 Excel) 將失敗 | 匯出功能失效 |
| 應用程式啟動 | 若 Global.asax 內部使用反射或呼叫外部組件,應用程式啟動即報錯 | Application_Start 失敗 |
| 序列化 / 加密 | 無法使用 MachineKey 或加密 API | System.Security.SecurityException |
🔸整體評估: 僅適用於靜態 HTML 或非常有限的動態頁面,實務上幾乎無法部署 ASP.NET 專案。
🟥 4️⃣ trust level="Minimal" 可能異常
最嚴格層級,只允許非常有限的基本運算與輸出,近乎沙盒。
| 類別 | 可能異常現象 | 錯誤訊息/行為 |
|---|---|---|
| ASP.NET 執行階段 | 幾乎所有系統類別被拒絕使用 | SecurityException 於啟動階段即發生 |
| 頁面呈現 | HttpContext, Request, Response 操作受限 |
Request for the permission ... failed |
| 控制項渲染 | WebForm 控制項可能無法 Render | 頁面空白或出現例外 |
| Session / Cookie | 無法建立 Cookie 或 Session | 登入、驗證全部失效 |
| 應用程式載入 | Global.asax、Web.config 中有自訂模組會導致整站無法啟動 | SecurityException 於啟動時拋出 |
🔸整體評估: 幾乎不可能運行任何 ASP.NET 程式,只能用於安全測試或理論環境。
📘 總結
| 層級 | 實務可用性 | 安全性 | 相容性 |
|---|---|---|---|
| Full | ✅ 高 | ⚠️ 低 | ✅ 最高 |
| High | ⚠️ 中 | ✅ 中 | ⚠️ 中 |
| Medium | ❌ 低 | ✅ 高 | ❌ 極低 |
| Low / Minimal | ❌ 極低 | ✅ 最高 | ❌ 無法運行 |
實務上,Medium 或以下信任層級幾乎不再使用,因為 ASP.NET Core 與新版 Framework 都不再支援 Partial Trust 模式。
🔄 四、系統更新或程式碼更新後的行為
若你的部署包含 Web.config,那麼部署後 IIS 啟動網站時會重新讀取其中的 <trust> 設定。
若沒有出現在 Web.config,則 IIS 使用機器層級 (machine.config) 預設值,通常是 Full。
🧠 五、實務建議
| 建議方向 | 原因 |
|---|---|
維持 Full |
目前 .NET Framework 4.x 及 IIS 10 幾乎皆假設 Full Trust 環境 |
| 若要通過 GCB 檢查 | 可文件化說明「應用程式需 Full Trust 才能運行」,並在稽核時註記「例外項」 |
| 若是純靜態網站 (HTML, JS) | 可設定為 Low 或 Minimal 無問題 |
📚 參考來源
ASP.NET Trust Levels and Policy Files
https://learn.microsoft.com/en-us/previous-versions/aspnet/wyts434y(v=vs.100)
Regarding .NET Trust level set
https://learn.microsoft.com/en-us/answers/questions/5572235/regarding-net-trust-level-set
********************************************************************************
(完)
相關
[研究]「ASP.NET 部分信任 (Partial Trust)」的 3rd Party 套件/元件支援狀況https://shaurong.blogspot.com/2025/11/aspnet-partial-trust-3rd-party.html
[研究]GCB,IIS,\system.web\trust\level 變更影響?
https://shaurong.blogspot.com/2025/11/gcbiissystemwebtrustlevel.html
[研究]「ASP.NET 部分信任 (Partial Trust)」的支援狀況
https://shaurong.blogspot.com/2025/11/aspnet-partial-trust.html
沒有留言:
張貼留言