2025年11月4日 星期二

[研究]ASP.NET WebForm 網站,IIS 10 中「要求篩選」允許的所有副檔名應該包含甚麼?

[研究]ASP.NET WebForm 網站,IIS 10 中「要求篩選」允許的所有副檔名應該包含甚麼?

2025-11-04

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

Windows Server 從Windows Server 2016開始,IIS為10.0版,後續 Windows Server 2019, Windows Server 2022, Windows Server 2025 也都是 10.0版,大版本號碼相同,小版本可能不同,畫面幾乎相同。

政府組態基準(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設定值
31 TWGCB-04-014-0031 要求篩選與其他限制模組 允許未列出的副檔名 ▪這項原則設定決定是否允許未列出的副檔名在網頁伺服器上被執行
▪限制網頁伺服器只能執行特定之檔案類型,可提升安全性
▪在取消勾選「允許未列出的副檔名」後,必須將網站中所有使用到之副檔名(例如:.asax、.cs及.html等)加入允許清單,網頁才能正常運作
伺服器 ▪取消勾選:
IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許未列出的副檔名」
▪新增允許副檔名:
IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\允許副檔名
不允許


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

ASP.NET WebForm 網站,IIS 10 中「要求篩選」允許的所有副檔名應該包含甚麼?

ChatGPT 

這題問得非常關鍵。依據政府組態基準(GCB TWGCB-04-014 Microsoft IIS 10.0)以及 ASP.NET WebForm 的實際執行機制,
在 IIS 10 的「要求篩選(Request Filtering) → 檔案名稱副檔名」設定中,允許的副檔名應該是僅限 ASP.NET WebForm 所需的動態與靜態資源。

🧩 一、ASP.NET WebForm 常見需要允許的副檔名

以下是建議可允許(白名單)的副檔名分類說明:

(A) ASP.NET WebForm 動態網頁核心副檔名

副檔名 說明
.aspx ASP.NET Web Form 主頁面
.asmx ASP.NET Web Service
.ashx ASP.NET 一般處理常式 (HttpHandler)
.asax Global Application Class(例如 Global.asax)
.axd ASP.NET 系統資源追蹤或 WebResource Handler (例如 trace.axd、ScriptResource.axd)

(B) ASP.NET 組件與樣板副檔名

副檔名 說明
.ascx User Control 使用者控制項
.master Master Page 主版頁面
.browser 瀏覽器定義檔 (App_Browsers)
.skin Theme 外觀樣式設定檔

⚠️ 通常 .ascx、.master、.skin、.browser 不會被直接請求到(IIS 要求篩選可封鎖外部直接請求),
但它們必須存在於伺服器上才能讓 WebForm 應用程式正常執行。
若要求篩選設定在「允許清單模式」,可以保留這些副檔名但不開放外部直接請求。

(C) 靜態內容副檔名

這些是 WebForm 網站最常見的靜態資源:

類型 副檔名
HTML 與標記 .html, .htm
CSS 樣式 .css
JavaScript .js
影像 .jpg, .jpeg, .png, .gif, .ico, .bmp, .svg
字型 .woff, .woff2, .ttf, .eot
文件下載 .pdf, .txt, .xml, .csv, .json(依實際網站需求開放)

(D) 特殊系統資源(視專案需求)

副檔名 說明
.sitemap ASP.NET 網站導覽設定檔
.config 應用程式設定檔(建議禁止直接存取)
.dll 組件(應禁止直接請求)

🚫 二、應封鎖或不允許直接請求的副檔名

類型 副檔名 說明
原始碼 .cs, .vb, .csproj, .vbproj, .resx, .resources
組態或專案描述 .webinfo, .vjsproj, .sln, .config(應封鎖外部直接請求)
伺服器內部檔案 .dll, .pdb, .exe, .bat, .cmd, .msi, .ps1, .reg

✅ 三、建議「要求篩選 → 檔案名稱副檔名允許清單」

若依「允許模式 (Allow List)」方式設定,ASP.NET WebForm 最小可運作集合如下:

               
.aspx
.asmx
.ashx
.axd
.asax
.ascx
.master
.skin
.browser
.sitemap
.html
.htm
.css
.js
.jpg
.jpeg
.png
.gif
.ico
.bmp
.svg
.woff
.woff2
.ttf
.eot
.pdf
.txt
.xml
.json
.csv

📘 四、參考資料來源

Microsoft Docs — Request Filtering <fileExtensions> element (IIS)
https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/fileextensions/

Microsoft Docs — ASP.NET Web Forms Overview
https://learn.microsoft.com/en-us/aspnet/web-forms/

Web Site File Types
https://learn.microsoft.com/en-us/previous-versions/aspnet/2wawkw1c(v=vs.100)

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

保證不會有缺漏嗎 ?

ChatGPT

這是一個非常專業也很實際的問題 👍。

答案是──沒有任何單一副檔名清單能「百分之百保證」涵蓋所有 ASP.NET WebForm 網站的需求但我們可以做到在標準 ASP.NET WebForm 架構下,100% 確保「正常運作不會受影響」且「安全上符合 GCB」。

以下是完整的技術說明與「保證層級」:

🧱 一、為什麼不能「保證」一份清單完全通用

即使都是 WebForm 專案,不同的網站仍可能包含:

第三方控制項套件(如 DevExpress、Telerik、Crystal Reports)

 → 這些控制項可能會使用額外副檔名,例如 .axd, .xap, .swf, .rdlc, .rpt。

自訂 MIME 類型(如前端工程整合)

 → 例如 .map(JS source map)、.json, .csv, .ts, .mjs。

自訂 Handler / Module

 → 開發人員可能在 web.config 中自行註冊 .foo, .data 等自訂副檔名。

所以:

✅ 我能給你「標準 ASP.NET WebForm 官方完整副檔名清單」,

⚠️ 但仍需以實際專案掃描或監控確認是否有額外需求副檔名。

✅ 二、標準 ASP.NET WebForm 官方完整副檔名清單

(含 Microsoft 官方文件中所有 ASP.NET 可能載入的檔案類型)

類別 副檔名 說明
主程式頁面 .aspx ASP.NET WebForm 主頁面
Web Service .asmx ASP.NET Web Service
HttpHandler .ashx 一般處理常式
應用程式事件 .asax Global Application File
系統追蹤/資源 .axd ScriptResource.axd, Trace.axd
使用者控制項 .ascx User Control
主版頁 .master Master Page
佈景樣式 .skin Theme Skin File
瀏覽器定義 .browser App_Browsers 設定檔
網站導覽 .sitemap SiteMap
設定檔 .config Web.config, Machine.config(不可公開存取)
資源檔 .resx, .resources 多語系資源檔(不可公開存取)
編譯後組件 .dll 應用程式組件(不可公開存取)
靜態內容 .html, .htm, .css, .js, .jpg, .jpeg, .png, .gif, .bmp, .ico, .svg
字型檔 .woff, .woff2, .ttf, .eot
資料格式檔 .xml, .json, .csv, .txt, .pdf
前端附加格式(視需求) .map, .webmanifest, .mp4, .webp(若網站前端用到)

🧮 三、若要「100% 確保不缺漏」

建議執行以下驗證流程(在測試伺服器上):
  1. 啟用 Request Filtering → 預設封鎖所有副檔名。
  2. 逐步啟用白名單(依上表),重新載入整個網站。
  3. 用 Fiddler、IIS log、或 Developer Tools → 觀察 404.7 (Request Filtering Denied) 錯誤。
  4. 若有 404.7,代表有缺漏副檔名,再依實際需求加回。
註:敝人覺得可能不切實際,會被業主、客戶、使用者罵翻,而且隨著功能增修、3rd Party 套件/原件更新改版,都可能會又有新應納入。

這樣就能:
  • 保證網站實際執行無誤;
  • 又確保沒有多餘副檔名開放,符合 GCB 第31條安全要求。
********************************************************************************
packages.config 內容如下,「要求篩選」請問要再增加允許甚麼副檔名 ?
(packages.config 內容略)

ChatGPT

類別 副檔名 來源 / 套件 / 用途
Excel / Office 文件 .xls, .xlsx, .xlsm ClosedXML, Aspose.Cells, NPOI
壓縮檔 .zip ProDotNetZip, SharpZipLib, FreeDataExports
Swagger / OpenAPI 文件 .swagger Swashbuckle(如果有生成 swagger JSON UI)

XD的,感覺這樣對網站的正常運作有些危險,而且 ChatGPT的分析不保證100%正確無遺漏。

(完)

沒有留言:

張貼留言