[研究]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/
https://download.nics.nat.gov.tw/api/v4/file-service/UploadFile/attachfilegcb/TWGCB-04-014_Microsoft%20IIS%2010%E6%94%BF%E5%BA%9C%E7%B5%84%E6%85%8B%E5%9F%BA%E6%BA%96%E8%AA%AA%E6%98%8E%E6%96%87%E4%BB%B6v1.1_1141002.pdf
https://download.nics.nat.gov.tw/api/v4/file-service/UploadFile/attachfilegcb/TWGCB-04-014_Microsoft%20IIS%2010%E6%94%BF%E5%BA%9C%E7%B5%84%E6%85%8B%E5%9F%BA%E6%BA%96%E8%AA%AA%E6%98%8E%E6%96%87%E4%BB%B6v1.1_1141002.docx
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