2025年11月14日 星期五

[研究]GCB,IIS,machine.config 設定 deployment retail="true" 影響

[研究]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/

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


項次 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 仍能正常運作。

********************************************************************************

(完)

沒有留言:

張貼留言