2025年11月4日 星期二

[研究]ASP.NEt WebForm 網站,「要求篩選」評估:運作過程中,會否有動態產生的副檔名 ?

[研究]ASP.NET WebForm 網站,「要求篩選」評估:運作過程中,會否有動態產生的副檔名 ?

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\要求篩選\動作\開啟功能\動作\允許副檔名
不允許


********************************************************************************
「允許未列出的副檔名」預設是勾選,GCB建議不勾選,變安全點,但更容易把網站運作搞到功能異常或癱瘓掉,因為在 ASP.NET WebForm 架構下,有很多動態生成的檔案

********************************************************************************
ASP.NET Webform 架構下,Runtime 時期過程動態產生的副檔名?

ChatGPT

非常好 👍 這樣我們就排除編譯階段 (Compile / Build),只聚焦在 **ASP.NET Web Forms「執行期間 (Runtime)」**動態產生的實體檔案。
以下是完整整理(僅含「執行時產生」、不含「預先編譯輸出」或「Temporary ASP.NET Files」的情況):

🧩 ASP.NET Web Forms Runtime 過程可能產生的動態檔案總覽

類別 典型副檔名 常見目錄 產生原因與機制 是否為預設行為 備註
1. Session 狀態 (File 模式) .sess, .bin, .dat 自訂的 SessionState provider 所指定的路徑 若在 web.config <sessionState mode="StateServer" 或 "SQLServer"> 改成 mode="Custom" 且 Provider 使用 File 模式 ❌(預設 InProc 不產生檔案) 只有 File-based session provider 會產生
2. ViewState 伺服端儲存模式 .tmp, .dat, .xml App_Data 或暫存資料夾(由程式決定) 若將 ViewState 改為伺服端保存 (例如 PageStatePersister = FileStatePersister) ❌(預設儲存在頁面隱藏欄位) 須在程式中明確設定
3. Cache / Output Cache 儲存 .cache, .bin, .dat 自訂快取目錄 若使用 OutputCacheProvider 且 Provider 為檔案型別 ❌(預設為記憶體快取) 多見於需跨應用程式共用快取的情境
4. 動態產生報表或匯出檔案 .xls, .xlsx, .csv, .pdf, .docx, .ods, .zip ~/App_Data/, ~/Temp/, ~/Reports/ 由程式碼中 Response.WriteFile()ExportToExcel()FileStream 等動態建立 ⭕ 常見 典型於報表、下載模組
5. 上傳檔案暫存 .tmp %SystemRoot%\Temp\C:\Users\<帳號>\AppData\Local\Temp\ ASP.NET 處理大型檔案上傳時會暫存於 IIS request buffer ⭕ 預設行為 IIS 會自動清除;通常檔案名如 App_Web_<GUID>.tmp
6. 應用程式層的暫存檔 .tmp, .dat, .txt 自訂目錄,如 ~/Temp/, ~/App_Data/Temp/ 程式邏輯需暫存資料(如報表合併、圖片壓縮中間檔) ⭕ 常見 完全由開發者控制
7. 圖片或文件快取檔 .jpg, .png, .gif, .webp, .pdf ~/CacheImages/~/Uploads/ 由程式或第三方元件(如報表控制項、圖表元件)動態產生 ⭕ 常見 如 Crystal Reports、Chart 控制項等
8. 記錄(Log) .log, .txt, .json, .xml ~/App_Data/Logs/ 或自訂路徑 使用 NLog、log4net、Serilog、TraceListener 等寫檔 ⭕ 常見 需確保無外部讀取權限
9. 自訂佇列 / 資料快取 .dat, .bin, .json ~/Queue/, ~/Cache/ 自訂應用程式產生,如待處理任務、訊息佇列 ⭕ 常見 須清理機制

⚙️ 額外補充:不會產生實體檔案但看似「動態」的項目

類別 說明
WebResource.axd, ScriptResource.axd 雖為動態資源,但實際為 IIS 處理管線生成的 HTTP 回應,不會產生實體檔案。

註:Source Code 和 Build/Compile/Deploy 出來的 Binary Code 可能並沒有 .axd,但是 Runtime 時期會有,要注意,免得網站癱瘓。

[研究]ASP.NET WebForm 為何會有 WebResource.axd 和 ScriptResource.axd
https://shaurong.blogspot.com/2025/07/aspnet-webform-webresourceaxd.html

[研究]ASP.NET WebForm 網站 HCL AppScan 10.18.0 報告【低】【找到可快取的 SSL 頁面】弱點,如何處理?(一)WebResource.axd 和 ScriptResource.axd
https://shaurong.blogspot.com/2025/07/aspnet-webform-hcl-appscan-10180-ssl.html
SessionState (InProc) 保存在記憶體,不會產生檔案。
ViewState (預設) 儲存在頁面 <input type="hidden" name="__VIEWSTATE" /> 中,不產生檔案。
OutputCache (預設) 保存在記憶體。

✅ 總結歸納

類型 是否預設存在 是否會產生實體檔案
ASP.NET Session (InProc)
ViewState (Client Hidden Field)
File-based Session Provider
File-based Cache Provider
應用層匯出檔案 / Log / 暫存 視程式需求
WebResource.axd / ScriptResource.axd

相關

ASP.NET Session State 概覽 — “ASP.NET Session State Overview” (Microsoft MSDN) 

Session 狀態模式說明 — “ASP.NET Session State Modes” (Conetix 支援文章) 

Web Forms 官方面介紹 — “ASP.NET Web Forms” (Microsoft docs) 

Web Forms 中 ViewState/Session 等狀態管理方式說明 — “Nine Options for Managing Persistent User State in ASP.NET” 

ViewState 保存在 Session 的範例討論(來自 StackOverflow) — 

(完)

沒有留言:

張貼留言