[研究]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/
| 項次 | 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) —
(完)

沒有留言:
張貼留言