[研究]GCB,IIS,machine.config 設定 <deployment retail="true" /> 影響
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/
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 13 | TWGCB-04-014-0013 | ASP.NET設定建議 | 以retail模式部署Web應用程式 | ▪這項原則設定決定是否以retail模式部署Web應用程式 ▪以retail模式部署Web應用程式時,ASP.NET將停用追蹤輸出、停用偵錯功能,並停止將詳細系統錯誤訊息傳送給遠端使用者,以避免資訊洩漏 ▪預設值為False |
系統檔案 | ▪開啟machine.config檔案,路徑如下:%systemroot%\Microsoft.NET\Framework64或Framework\framework版本\CONFIG\machine.config ▪設定machine.config:在<system.web>下加入設定值<deployment retail="true" /> |
True |
設定machine.config:在<system.web>下加入設定值<deployment retail="true" /> (預設是 False)
請問會否導致 ASP.NET WebForm 網站功能異常?
此值 Web.Config 有相對應值 ?
會以 machine.config 或 Web.config 為準 ?
ChatGPT
✅ 結論摘要
<deployment retail="true" /> 通常不會造成網站功能異常,但會導致 診斷/除錯 與詳細錯誤輸出 受到限制。
Web.config 沒有對等的設定項目,此設定只能放在 machine.config(或 root web.config)。
machine.config 的 <deployment retail="true" /> 會覆寫所有 Web.config 的 debug="true" 與 trace="enabled" 設定,並強制關閉 debug 與 trace。
🔍 一、<deployment retail="true" /> 會造成什麼影響?
此設定代表 IIS 部署模式為「正式上線模式(Retail Mode)」。
啟用後(true)會強制 ASP.NET:
| 功能 | 行為 |
|---|---|
<compilation debug="true"> |
❌ 自動變成 false,無法啟動 debug |
<trace enabled="true"> |
❌ 被強制關閉,無法啟動 Trace.axd |
| 詳細錯誤頁 | ❌ 強制關閉詳細錯誤(顯示精簡錯誤頁) |
| 自動生成序列化程式碼 | 部分 debug 時期行為被關閉 |
| JIT 最佳化 | 強制使用正式模式 JIT |
✔ 不會受到影響的部分
| 功能 | 影響 |
|---|---|
| ASP.NET 控件功能 | ✔ 不受影響 |
| Session / ViewState | ✔ 不受影響 |
| Page Lifecycle | ✔ 不受影響 |
| WebForm Postback | ✔ 不受影響 |
| 任何正常業務邏輯 | ✔ 不受影響 |
👉 一般 WebForm 網站功能通常完全不會壞掉
除非你依賴:
- Debug 模式特性
- Trace.axd
- 自訂的錯誤訊息顯示
才會受到影響。
🔍 二、Web.config 是否有同等設定?
❌ 沒有
<deployment retail="true" /> 這個設定:
- 只能存在 machine.config 或 root 的 web.config
- 不能在單一網站的 web.config 設定
.NET Framework 官方文件明確說明:
💡 此設定只適用於 machine.config 和 applicationHost.config,不適用於應用程式層級。
🔍 三、machine.config vs web.config 誰優先?
👉 machine.config 的 <deployment retail="true" /> 會覆寫所有 Web.config 設定
即使你在網站的 Web.config 寫:
<compilation debug="true" /> <trace enabled="true" /> <customErrors mode="Off" /> |
只要 machine.config 設定為:
<deployment retail="true" /> |
ASP.NET 仍會強制:
- debug = false
- trace = false
- 顯示簡易錯誤頁
- 不允許本機詳細錯誤
🔍 四、政府組態基準(GCB)為什麼要求 retail="true"?
因為它可防止:
❌ 除錯資訊外洩(StackTrace、內部 Exception 堆疊)
❌ Trace.axd 被掃描出來(Security finding)
❌ Debug 模式低效能、潛在資訊外洩
✔ 統一所有網站使用正式上線模式
屬於「安全強化」項目。
🧪 五、是否推薦啟用?(實務建議)
| 環境 | 建議 |
|---|---|
| 正式機(Production) | 建議開啟(符合政府 GCB) |
| 測試/開發 | 不應開啟(會導致無法 debug) |
📌 總結
| 問題 | 回答 |
|---|---|
| 會不會造成 WebForm 網站功能異常? | 不會(除非大量使用 debug 或 trace 功能) |
| Web.config 是否有相對應值? | 沒有 |
| 會以 machine.config 或 web.config 為準? | machine.config 優先,並會強制覆寫 web.config |
********************************************************************************
無法啟動 Trace.axd,會否使下面 Elmah 網頁無法用 ? https://xxx.xxx.xxx.xxx/elmah.axd
ChatGPT
✅ <deployment retail="true" /> 不會影響 ELMAH(elmah.axd 可以正常使用)
即使 Trace.axd 會被強制關閉,ELMAH 自己的頁面 /elmah.axd 仍能正常運作。
********************************************************************************
(完)
沒有留言:
張貼留言