[研究]GCB,IIS,"要求篩選","允許未列出的副檔名"取消勾選,"允許副檔名" 首頁處理
2026-01-23
.aspx 加入允許名單
下圖,同一個網站,https://localhost/default.aspx 正常
下圖,解決方法,新增一個 "." (句點),沒有副檔名名稱的檔案
下圖,否則網站有設定預設首頁也沒用
(完)
[研究]GCB,IIS,"要求篩選","允許未列出的副檔名"取消勾選,"允許副檔名" 首頁處理
2026-01-23
.aspx 加入允許名單
下圖,同一個網站,https://localhost/default.aspx 正常
下圖,否則網站有設定預設首頁也沒用
(完)
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的指令動詞" 變成不勾選
2025-01-23
TWGCB-04-014-0031 是 "允許未列出的副檔名",
但 "允許未列出的副檔名" 不在 GCB 要求中,
ASP.NET WebForm,在測試 IIS 10.0 GCB,"要求篩選","允許未列出的副檔名","允許副檔名",Web.Config 過程中,不知何時、何原因,某些網站 "允許未列出的指令動詞" 變成不勾選
ChatGPT 提的一堆檢查都不是,但有句話值得注意,
副檔名 (File Extensions) 與 指令動詞 (HTTP Verbs) 是同一個模組:Request Filtering
關聯影響有空再研究、、、
[研究]IIS,要求篩選,"允許未列出的指令動詞",甚麼是 "指令動詞" ? 勾選、不勾選 的意義? 影響 ?
2026-01-21
ASP.NET,WebForm,IIS,要求篩選,"允許未列出的指令動詞",甚麼是 "指令動詞" ? 勾選、不勾選 的意義? 影響 ?
ChatGPT
在 IIS(Internet Information Services)→ 要求篩選(Request Filtering) 中,
「允許未列出的指令動詞」 這個選項常讓人困惑,下面用清楚、偏實務的方式說明。
一、什麼是「指令動詞(Verb)」?
在 IIS 裡,「指令動詞」指的是 HTTP Method(HTTP 動作),也就是瀏覽器或用戶端對伺服器發送請求時,所使用的動作種類。
常見 HTTP 指令動詞
| 指令動詞 | 說明 |
|---|---|
| GET | 取得資源(最常見,瀏覽網頁) |
| POST | 傳送資料(表單送出) |
| HEAD | 只取得 Header,不含內容 |
| PUT | 上傳 / 覆寫資源 |
| DELETE | 刪除資源 |
| OPTIONS | 查詢伺服器支援哪些動詞 |
| TRACE | 回傳請求內容(有資安風險) |
| PATCH | 局部更新資源 |
| PROPFIND | WebDAV 用 |
👉 這些 不是副檔名、不是 URL,而是 HTTP 通訊協定層級的「動作」。
二、「允許未列出的指令動詞」是什麼意思?
當用戶端送來的 HTTP Method,不在你明確列出的清單裡時,要不要放行?
白話翻譯
| 設定 | 意義 |
|---|---|
| ☑ 勾選(允許) | 沒列出來的動詞,一律放行 |
| ☐ 不勾選(不允許) | 只允許你明確列出的動詞,其它全部封鎖 |
三、勾選 vs 不勾選 的實際差異
✅ 勾選「允許未列出的指令動詞」(預設值)
行為
特性
適合
❌ 不勾選「允許未列出的指令動詞」
行為
特性
適合
四、實際影響範例
情境 1:只允許 GET、POST
IIS 設定:
結果
| 動詞 | 結果 |
|---|---|
| GET | ✅ 正常 |
| POST | ✅ 正常 |
| HEAD | ❌ 404.6 |
| OPTIONS | ❌ 404.6 |
| PUT | ❌ 404.6 |
⚠ HEAD / OPTIONS 被擋,可能造成:
五、與常見 IIS 錯誤碼的關係
| HTTP 錯誤 | 意義 |
|---|---|
| 404.6 | 指令動詞被要求篩選拒絕 |
| 405 | 動詞不被該資源支援 |
| 404.7 | 副檔名被拒絕(不是動詞問題) |
👉 404.6 = 動詞問題
👉 404.7 = 副檔名問題
六、實務建議(給 ASP.NET WebForms)
✔ 一般 WebForms 網站(非 API)
✅ 勾選「允許未列出的指令動詞」
✔ 若要加強資安(仍是 WebForms)
七、一句話總結
(完)
[研究]IIS 10.0 GCB,"要求篩選" 更新 "允許副檔名" 羅生門
2026-01-20
ASP.NET WebForm 方案1 和 方案2 測試 IIS "要求篩選"
IIS「伺服器」層級 "要求篩選" "允許未列出副檔名" 不勾選 (不允許)
IIS「網站」層級 (方案1) "要求篩選" "允許未列出副檔名" 沒勾選 (不允許)
IIS「網站」層級 (方案2) "要求篩選" "允許未列出副檔名" 沒勾選 (不允許)
實際測試
測試1: 方案1 在 Visual Studio 2019 做 Deploy 後,Web.Config 中允許的副檔案有被添加到「網站」層級 "要求篩選" 的 "副檔名" 名單中,
測試2: 方案2 在 Visual Studio 2019 做 Deploy 後,Web.Config 中允許的副檔案有卻沒被添加到「網站」層級 "要求篩選" 的 "副檔名" 名單中,
請問測試2副檔名為何沒被添加 ?
和 ChatGPT 聊了老半天,發現還有些設定或情況會 "允許副檔名" 名單會否更新的,但談到最後愈來愈複雜,且都沒找到原因。
目前比較穩定的作法是"要求篩選" ""允許未列出副檔名" 的相關設定,不要改「網站」層級,改「伺服器」層級 ( GCB 也是說改「伺服器」層級)
(待續)
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,實測 .axd 檔案(二)
2025-01-20
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2
********************************************************************************
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>動態生成檔案範例</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<asp:Label ID="Label1" runat="server" Text="按下按鈕會生成動態 .axd 檔案"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="生成動態檔案" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
|
Default.aspx.cs
using System;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
// 產生一個 WebResource 的動態 URL
// ASP.NET 會生成 WebResource.axd 來提供內嵌資源
string scriptUrl = this.Page.ClientScript.GetWebResourceUrl(typeof(Default), "WebFormDynamicFileDemo.Scripts.Sample.js");
Label1.Text = "動態生成的 .axd URL: <a href='" + scriptUrl + "' target='_blank'>" + scriptUrl + "</a>";
}
}
} |
實際測試
雖然之前的測試的案例,.axd 是不用加入 "允許副檔名" 的名單就可運作;且 ChatGPT 也說理論上是不需要加入的;
但這個範例,不加入是無法運作。
下圖,加入 .axd 後,仍無法運作,變成另一種問題。
相關
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,ASP.NET WebForm 動態生成的檔案,副檔名都不用加入"允許副檔名" 名單嗎?
https://shaurong.blogspot.com/2026/01/iis-100-gcb-aspnet-webform.html
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,ASP.NET WebForm 動態生成的檔案,副檔名都不用加入"允許副檔名" 名單嗎?
2026-01-20
續
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,實測 .axd 檔案
https://shaurong.blogspot.com/2026/01/iis-100-gcb-axd.html
很難全面實際測試,只能問
ChatGPT
你問的非常重要,我仔細整理如下。重點:不是全部動態副檔名都不用加,但大部分 ASP.NET WebForms 產生的動態檔案確實不需要加到「允許副檔名」名單,因為 IIS 的「要求篩選」主要管的是 靜態檔案。
1️⃣ IIS「要求篩選」作用
功能:控制 靜態檔案或未知副檔名 是否允許存取
預設:
如果「允許未列出的副檔名」打勾 → 任何副檔名都可以
如果沒打勾 → 只有列在「允許副檔名」清單的副檔名才會被 IIS 放行
注意:ASP.NET Handler / Module 處理的動態請求(例如 .axd、.asmx、.svc)不走副檔名白名單,只要 ASP.NET pipeline 正常,它們會被直接交給 Runtime 處理
2️⃣ ASP.NET WebForms 常見動態檔案副檔名
| 副檔名 | 用途 | 是否需要加入允許副檔名 |
|---|---|---|
.axd | ScriptResource、WebResource、Trace.axd | ❌ 不需要 |
.ashx | 自訂 HTTP Handler | ❌ 不需要 |
.asmx | Web Service | ❌ 不需要 |
.svc | WCF Service | ❌ 不需要 |
.json | WebMethod / Web API 回傳 | ❌ 不需要(由 ASP.NET 處理) |
.config | web.config、machine.config | ⚠️ 靜態檔案敏感,通常不能直接存取 → IIS 會封鎖 |
.aspx / .ascx / .master | WebForms 頁面或控制項 | ❌ 不需要,只要 ASP.NET pipeline 正常 |
.cs / .vb | 原始碼檔案 | ❌ 靜態檔案,不應該允許存取 |
.pdb / .dll | 編譯結果 | ❌ 靜態檔案,通常封鎖,不加入白名單 |
🔑 原則:所有由 ASP.NET Handler/Runtime 動態生成的檔案,只要管道正確,IIS 就會交給 ASP.NET 處理,不受副檔名白名單影響。
3️⃣ 什麼情況「需要手動加入」副檔名?
正常情況下,標準 WebForms .axd、.ashx、.asmx 不需要加到白名單。
4️⃣ 總結原則
1.動態副檔名 → 不需要加入允許副檔名
(只要 ASP.NET pipeline 正常)
2.靜態副檔名 → 如果未列在允許清單且「允許未列出的副檔名」❌,就需要加入
(例如 .css、.js、圖片、下載檔)
3.敏感檔案如 .config、.pdb、.cs 不要加入白名單,否則安全風險大
(完)
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,實測 .axd 檔案(一)
2025-01-20
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2
********************************************************************************
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<!-- ScriptManager 會產生 ScriptResource.axd -->
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:Label ID="Label1" runat="server" Text="Hello, WebForms!"></asp:Label>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="更新 Label"
OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
|
Default.aspx.cs
using System;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 首次載入時顯示時間
if (!IsPostBack)
{
Label1.Text = "頁面首次載入:" + DateTime.Now.ToString("HH:mm:ss");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// 更新 Label,這會觸發 UpdatePanel 重新渲染
Label1.Text = "按鈕點擊時間:" + DateTime.Now.ToString("HH:mm:ss");
}
}
}
|
說明
1.ScriptManager:WebForms 核心控制元件,會在頁面生成時自動產生對應的 .axd 檔案,例如:
2.UpdatePanel:使用 Ajax 局部更新時,也會向 .axd 發送請求。
3.動態檔案 .axd:
4/點擊 更新 Label,瀏覽器會發送對 .axd 的請求,且可以在瀏覽器 Network tab 看到,例如:
********************************************************************************
Visual Studio 2019 中做 Deploy 到 IIS 網站,
「網站」層級
後續
[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,ASP.NET WebForm 動態生成的檔案,副檔名都不用加入"允許副檔名" 名單嗎?
https://shaurong.blogspot.com/2026/01/iis-100-gcb-aspnet-webform.html
(完)
相關
[研究]實測,GCB,IIS,要求篩選,「允許未列出的副檔名」和「副檔名」列表
2026-01-19
偶然發現,ASP.NET WebForm 網站 deploy 後,「網站」層級「允許未列出的副檔名」和「副檔名」列表會自動從 IIS「伺服器」層級設定重新覆蓋;所以去改「網站」層級沒有意義,除非不再 Deploy 新 CODE。
********************************************************************************
2026-01-19 補
測試1:Visual Studio 2019 直接 Deploy CODE 到 真實網站目錄,「伺服器」層級「允許未列出的副檔名」和「副檔名」列表會覆蓋「網站」層級設定。
測試2:把真實網站目錄拷貝走,修改設定,目錄拷貝回來覆蓋,設定存在。
測試3:Visual Studio 2019 直接 Deploy \bin\app.publish 目錄,再拷貝覆蓋掉真實目錄,「伺服器」層級「允許未列出的副檔名」和「副檔名」列表會覆蓋「網站」層級設定。
測試4:「網站」層級新增、刪除一個副檔名後,會反映到 Web.Config,似乎以「伺服器」層級為 Base 的相對設定。<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="false">
<remove fileExtension=".asax" />
<add fileExtension=".aaa" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
|
測試5:
狀況A:「伺服器」層級「允許未列出的副檔名」打勾(允許)(沒有.aspx);「網站」層級「允許未列出的副檔名」不打勾(不允許),網站可以跑。
狀況B:「伺服器」層級「允許未列出的副檔名」不打勾(不允許)(沒有.aspx);「網站」層級「允許未列出的副檔名」不打勾(不允許),網站可以跑。
測試6:就算是 .png 檔案,沒有允許也會看不到圖片
[研究]GCB,IIS,要求篩選,列出某目錄(含子目錄)所有副檔名種類的 .bat,需要明確允許名單
2025-01-16
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2
********************************************************************************
.bat 內容
@echo off
set "folder=D:\Production\OT"
set "tmpfile=%temp%\extlist.txt"
if exist "%tmpfile%" del "%tmpfile%"
for /r "%folder%" %%f in (*) do (
echo %%~xf >> "%tmpfile%"
)
sort "%tmpfile%" /unique
del "%tmpfile%"
|
測試
********************************************************************************
【考慮副檔名有多節,全部副檔名相同才算相同,否則算不同】
.bat 內容
@echo off
setlocal enabledelayedexpansion
set "folder=D:\目錄\子目錄"
set "outfile=extensions.txt"
type nul > "%outfile%"
for /r "%folder%" %%f in (*) do (
set "name=%%~nxf"
if not "!name!"=="!name:.=!" (
set "ext=.!name:*.=!"
echo !ext!>>"%outfile%"
)
)
sort "%outfile%" /unique
|
測試
********************************************************************************
IIS 10.0 要求篩選,"允許未列出的副檔名" 若不勾選,
"允許副檔名" 新增 .aspx,那
abd.aspx
abd.def.aspx
是否都可以執行?還是只有第一個可執行?第2個不可執行?
它以最後一節判斷?還是全部副檔名判斷?
ChatGPT
結論先講:IIS 是「只看最後一節副檔名」來判斷。
敝人實際測試,確實「只看最後一節副檔名」來判斷。
********************************************************************************
【實測】
一個很簡單的 ASP.NET WebFom 網站
.aspx .config .dll .exe .pdb .rsp .targets |
| 副檔名 | 用途 | 瀏覽器可請求 | 正式站台 |
|---|---|---|---|
.aspx |
Web 頁面 | ✅ | ✅ |
.config |
組態設定 | ❌ | ✅ |
.dll |
已編譯程式碼 | ❌ | ✅ |
.exe |
可執行檔 | ❌ | ❌ |
.pdb |
除錯資訊 | ❌ | ❌ |
.rsp |
編譯參數 | ❌ | ❌ |
.targets |
MSBuild 規則 | ❌ | ❌ |
ChatGPT 說需要明確允許的只有 .aspx
*****
ASP.NET WebFom 網站O
.ascx .aspx .compiled .config .css .dll .eot .gif .htm .html .jpg .js .map .master .otf .pdb .pdf .png .pptx .scss .svg .ttf .txt .woff .woff2 .xlsx |
| 副檔名 | 用途 / 存取方式 | 是否需要明確允許 | 說明 |
|---|---|---|---|
| .ascx | ASP.NET User Control(嵌入頁面片段) | ✅ | 需要允許,否則無法被 .aspx 載入。 |
| .aspx | ASP.NET WebForm 頁面 | ✅ | 必須允許才能執行頁面。 |
| .compiled | ASP.NET 編譯後的控制項 / 頁面 | ❌ | 內部使用,非 HTTP 存取,Request Filtering 不影響。 |
| .config | web.config / app.config | ❌ (建議封鎖) | 不建議允許 HTTP 存取,避免洩漏設定。 |
| .css | 樣式表 | ✅ | 靜態檔案,需要允許才能載入。 |
| .dll | .NET 程式集檔案 | ❌ | 內部載入,不受 Request Filtering 影響。 |
| .eot | 字型檔 (Embedded OpenType) | ✅ | 用戶端請求需要允許。 |
| .gif | 靜態圖片 | ✅ | 用戶端請求需要允許。 |
| .htm / .html | 靜態網頁 | ✅ | 用戶端請求需要允許。 |
| .jpg | 靜態圖片 | ✅ | 用戶端請求需要允許。 |
| .js | JavaScript 檔案 | ✅ | 用戶端請求需要允許。 |
| .map | JavaScript / CSS source map | ✅ | 用戶端調試需要允許(非必要,可依需求封鎖)。 |
| .master | ASP.NET Master Page | ✅ | 必須允許,否則 .aspx 無法正確引用。 |
| .otf | 字型檔 (OpenType) | ✅ | 用戶端請求需要允許。 |
| .pdb | 除錯符號檔 | ❌ (建議封鎖) | 不需要用戶端存取。 |
| 文件 / 靜態檔案 | ✅ | 用戶端請求需要允許。 | |
| .png | 靜態圖片 | ✅ | 用戶端請求需要允許。 |
| .pptx | Office 文件 | ✅ | 用戶端請求需要允許。 |
| .scss | SASS 原始檔案 | ❌ (建議封鎖) | 不應提供給用戶端,僅編譯成 CSS 使用。 |
| .svg | 向量圖檔 | ✅ | 用戶端請求需要允許。 |
| .ttf | 字型檔 (TrueType) | ✅ | 用戶端請求需要允許。 |
| .txt | 純文字檔 | ✅ | 用戶端請求需要允許。 |
| .woff | 字型檔 (Web Open Font Format) | ✅ | 用戶端請求需要允許。 |
| .woff2 | 字型檔 (Web Open Font Format 2) | ✅ | 用戶端請求需要允許。 |
| .xlsx | Excel 文件 | ✅ | 用戶端請求需要允許。 |
**********
ASP.NET WebFom 網站S
.7z .asax .ascx .aspx .config .css .csv .dll .doc .docx .eot .exe .flow .gif .htm .html .ico .js .json .lic .map .Master .md .msg .ods .odt .pdb .pdf .png .pptx .rsp .sitemap .svg .targets .thmx .ttf .ttinclude .txt .vue .woff .woff2 .xlsx .xml |
| 副檔名 | 用途 / 存取方式 | 是否需要明確允許 | 說明 |
|---|---|---|---|
| .7z | 壓縮檔,用戶端下載 | ✅ | 用戶端請求需允許。 |
| .asax | ASP.NET 應用程式 Global.asax | ✅ | 用戶端請求需允許(ASP.NET 初始化時使用)。 |
| .ascx | ASP.NET User Control | ✅ | 必須允許,否則 .aspx 無法載入控制項。 |
| .aspx | ASP.NET WebForm 頁面 | ✅ | 必須允許才能執行頁面。 |
| .config | web.config / app.config | ❌ (建議封鎖) | 敏感檔案,不應允許 HTTP 存取。 |
| .css | 樣式表 | ✅ | 靜態檔案,需要允許才能載入。 |
| .csv | 用戶端下載 / 匯出 | ✅ | 靜態檔案,需要允許。 |
| .dll | .NET 程式集檔案 | ❌ | 內部載入,不受 Request Filtering 影響。 |
| .doc / .docx | Office 文件 | ✅ | 用戶端請求需允許。 |
| .eot | 字型檔 (Embedded OpenType) | ✅ | 用戶端請求需允許。 |
| .exe | 執行檔 | ❌ (建議封鎖) | 不應允許 HTTP 存取,安全風險高。 |
| .flow | 流程檔案 / 專案檔(內部使用) | ❌ (建議封鎖) | 不需要用戶端存取。 |
| .gif | 靜態圖片 | ✅ | 用戶端請求需允許。 |
| .htm / .html | 靜態網頁 | ✅ | 用戶端請求需允許。 |
| .ico | 圖示 / favicon | ✅ | 用戶端請求需允許。 |
| .js | JavaScript | ✅ | 用戶端請求需允許。 |
| .json | 靜態資料 / 配置檔 | ✅ | 用戶端請求需允許(如前端 AJAX)。 |
| .lic | 授權檔案 | ❌ (建議封鎖) | 不應公開,避免洩漏授權資訊。 |
| .map | JS / CSS source map | ✅ | 用於開發 / 調試,非必要可封鎖。 |
| .master | ASP.NET Master Page | ✅ | 必須允許,否則 .aspx 無法正確引用。 |
| .md | Markdown 文件 | ✅ | 用戶端下載 / 查看需允許。 |
| .msg | Outlook 郵件檔 | ✅ | 用戶端下載需允許。 |
| .ods / .odt | OpenDocument 文件 | ✅ | 用戶端下載需允許。 |
| .pdb | 除錯符號檔 | ❌ (建議封鎖) | 不需要用戶端存取。 |
| 文件 / 靜態檔案 | ✅ | 用戶端下載需允許。 | |
| .png | 靜態圖片 | ✅ | 用戶端請求需允許。 |
| .pptx | Office 文件 | ✅ | 用戶端請求需允許。 |
| .rsp | 編譯回應 / Response files | ❌ (建議封鎖) | 內部使用,不需要用戶端存取。 |
| .sitemap | 網站導覽檔 | ✅ | 用戶端或搜尋引擎請求需允許。 |
| .svg | 向量圖檔 | ✅ | 用戶端請求需允許。 |
| .targets | MSBuild Targets | ❌ (建議封鎖) | 內部使用,不需要用戶端存取。 |
| .thmx | PowerPoint / Office 主題文件 | ✅ | 用戶端下載需允許。 |
| .ttf | 字型檔 (TrueType) | ✅ | 用戶端請求需允許。 |
| .ttinclude | Web / 模板包含檔(專案內部) | ❌ (建議封鎖) | 內部使用,不需要用戶端存取。 |
| .txt | 純文字檔 | ✅ | 用戶端請求需允許。 |
| .vue | Vue 前端程式檔案 | ✅ | 用戶端請求需允許(如果直接暴露在網站上)。 |
| .woff | 字型檔 (Web Open Font Format) | ✅ | 用戶端請求需允許。 |
| .woff2 | 字型檔 (Web Open Font Format 2) | ✅ | 用戶端請求需允許。 |
| .xlsx | Excel 文件 | ✅ | 用戶端請求需允許。 |
| .xml | 靜態資料 / 配置檔 | ✅ | 用戶端請求需允許(如 sitemap.xml 或 API)。 |
(完)
相關
[研究]GCB,要求篩選,IIS安裝「失敗要求的追蹤規則(IIS Failed Request Tracing(FREB))」
2026-01-10
環境:Windows Server 2019 標準版 + IIS 10.0
(完)
[研究]IIS 10.0 GCB,實測 Web.Config 多甚麼 - forms cookieless="UseCookies"
2025-01-16
IIS 10.0 套用 GCB 後,有些會變更現有 Web.Config 設定,要回頭改 Source Code,否則下次 Deploy 後,GCB 設定會被覆蓋消失。
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2
********************************************************************************
兩個不同系統套用 IIS 10.0 GCB 後 Web.Config
<authentication mode="None">
<forms cookieless="UseCookies" />
</authentication>
|
<authentication mode="Windows">
<forms cookieless="UseCookies" requireSSL="true" />
</authentication>
|
<configuration>
<system.web>
<compilation targetFramework="4.8" />
<httpRuntime targetFramework="4.8" />
<machineKey validation="HMACSHA256" />
<authentication>
<forms cookieless="UseCookies" />
</authentication>
</system.web>
</configuration>
|
********************************************************************************
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 9 | TWGCB-04-014-0009 | 設定驗證與授權 | 表單驗證Cookie 模式 |
| 站台 | IIS 管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\authentication\forms\cookieless | UseCookies |
| <authentication>的mode值 | 說明 |
| None | 不指定驗證。 |
| Windows | 指定 Windows 當做驗證模式。 當使用網際網路資訊服務 (IIS) 驗證方法 (基本、摘要、整合式 Windows (NTLM/Kerberos) 或憑證) 時,會套用這個模式。 |
| Passport | 指定 Microsoft Passport 當做驗證模式。 |
| Forms | 將 ASP.NET 表單式驗證指定為驗證模式。 |
<authentication mode> | <forms> 標籤是否有效 | 使用情境 | 行為 / 備註 | 建議環境設定 |
|---|---|---|---|---|
Forms (預設 <authentication> 未指定 mode 也是 Forms) | ✅ 有效 | 傳統 WebForm 登入系統 | 使用 <forms> 的 cookie 或 URL 保存驗證票 (FormsAuthenticationTicket);支援 cookieless、loginUrl、timeout 等屬性 | 開發 / 測試 / 正式:如果使用自訂登入系統(Forms Authentication) |
| Windows | ❌ 無效 | 內網 / AD 驗證 | IIS 控制 Windows 認證(NTLM / Kerberos);忽略 <forms> 設定;登入使用者由 Windows 帳號提供 | 開發 / 測試內網可用;正式機公開網不建議 |
| None | ❌ 無效 | 不使用 ASP.NET 原生認證 | 完全不啟用 FormsAuthenticationModule;若使用 Microsoft Identity (OWIN) 或其他自訂認證,需要 mode="None" | 開發 / 測試可快速跳過登入;正式機使用 Microsoft Identity/Owin cookie |
相關
[研究]IIS 10.0 GCB,實測 Web.Config 多甚麼 - TRACE
2025-01-16
IIS 10.0 套用 GCB 後,有些會變更現有 Web.Config 設定,要回頭改 Source Code,否則下次 Deploy 後,GCB 設定會被覆蓋消失。
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2
********************************************************************************
Web.Config
<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="TRACE" allowed="false" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
|
可能 No17 或 No.30 影響,兩者都有 TRACE,但應該是 No.30
[研究]IIS 10 GCB,ASP.NET設定建議,ASP.NET堆疊追蹤,移除或關閉 Trace (No.17)
https://shaurong.blogspot.com/2026/01/iis-10-gcbaspnetaspnet-trace.html
[研究]GCB,IIS 設定「拒絕 TRACE」影響 (No.30)
https://shaurong.blogspot.com/2025/11/tracegcbiis-trace.html
********************************************************************************
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 30 | TWGCB-04-014-0030 | 要求篩選與其他限制模組 | HTTP TRACE方法 | ▪這項原則設定決定允許或拒絕使用HTTP TRACE方法 ▪HTTP TRACE方法會傳回用戶端提交的HTTP請求內容,攻擊者可利用此方法繞過HttpOnly限制,來存取HTTP標頭中所包含的機敏資訊(如驗證資料或Cookie) ▪預設值為允許 | 伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\HTTP指令動詞\動作\拒絕指令動詞\輸入「TRACE」 | 拒 絕 |
| 環境 | TRACE 設定建議 |
|---|---|
| 開發機 | 允許(方便 debug,僅內網) |
| 測試機 | 禁用或限制內網使用 |
| 正式機 | 禁用(安全性需求) |
相關
[研究] IIS 10.0 GCB "要求篩選與其他限制模組","允許高位元字元" 實測
2026-01-13
********************************************************************************
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設定值 |
| 28 | TWGCB-04-014-0028 | 要求篩選與其他限制模組 | 允許高位元字元 | ▪這項原則設定決定查詢字串是否允許使用高位元字元(非ASCII字元)。高位元字元之範例包括:Ж、Ы或Я ▪當查詢字串因含有高位元字元而被拒絕時,IIS將會記錄404.12狀態在日誌檔中 ▪禁止使用高位元字元,可確保URL中不會出現非ASCII文字,以避免發生輸入特殊字元或跳脫命令字元等攻擊語法 ▪預設值為允許高位元字元 | 伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許高位元字元」 | 不允許 |
下圖,程式在 Visual Studio 2019 中執行正常 (檔案中文名稱)
下圖,Deploy 後,英文檔案名稱 (Default.aspx ) 正常
**********
下圖,嘗試下載檔案名稱有中文的檔案,失敗
註:有可能需要網站重新啟動 or IIS重新啟動 or Windows 重新啟動。
********************************************************************************
2026-01-15 補
下圖,有人說他測試可以;注意,如果在 Visual Studio 2019 中執行 ASP.NET WebForm,是可以的,那是因為 Visual Studio 中用的 IIS Expresss,不是 IIS 10.0
(完)
[研究] IIS 10.0 GCB "要求篩選與其他限制模組","允許未列出的副檔名" 實測
2026-01-13
********************************************************************************
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\要求篩選\動作\開啟功能\動作\允許副檔名 | 不允許 |
下圖,程式在 Visual Studio 2019 中執行正常
下圖,
Deploy 後,照 GCB 要求設定「允許未列出的副檔名」為「不允許」
**********
HTTP 錯誤 404.7 - Not Found
要求篩選模組設定為拒絕副檔名。
最有可能的原因:
已為網頁伺服器設定要求篩選,並且明確拒絕此要求的副檔名。
解決方法:
確認 applicationhost.config 和 web.config 中的 configuration/system.webServer/security/requestFiltering/fileExtensions 設定。
詳細錯誤資訊:
模組 RequestFilteringModule
通知 BeginRequest
處理常式 ExtensionlessUrlHandler-Integrated-4.0
錯誤碼 0x00000000
要求的 URL https://localhost:443/
實體路徑 D:\Production\Test443
登入方法 尚未判定
登入使用者 尚未判定
詳細資訊:
此為安全性功能。除非完全瞭解變更的範圍,否則請勿變更此功能。如果要允許要求的副檔名,則移除 configuration/system.webServer/security/requestFiltering/fileExtensions 中拒絕的副檔名。
檢視詳細資訊 »
**********
下圖,上圖點 "檢視詳細資訊"
檢視網站目錄中檔案,添加允許的副檔名
移除 .config、新增 .config (預設有,但為 False,無法變更設定,只好刪除後,新增允許)
新增 .aspx、.axd、.dll、.exe、.pdb、.rsp、.targets
註:.axd 檔案是動態產生的,不在目錄中。
依然失敗,訊息沒有明確說明哪個副檔名被禁止,微軟 Microsoft 官方也沒有公布全部 ASP.NET WebForm 會用的副檔名清冊。
而且還有第三方元件用到的所有檔案的副檔名也是一個問題,看得到的好添加,若動態產生的新副檔名的也難預知。
暫時無解,建議排除。
********************************************************************************
2026-01-16補
實際測試,「網站」層級設定可以覆蓋「伺服器」層級設定。
【「允許未列出的副檔名」設定為「不允許」】
「伺服器」層級設定修改 C:\Windows\System32\inetsrv\config\applicationHost.config
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="false" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
|
「網站」層級修改網站根目錄 Web.Config
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="false" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
|
(看起來相同)
【副檔名白名單】
「伺服器」層級設定修改 C:\Windows\System32\inetsrv\config\applicationHost.config
<requestFiltering>
<fileExtensions allowUnlisted="false">
<add fileExtension=".aspx" allowed="true" />
</fileExtensions>
</requestFiltering>
|
「網站」層級修改網站根目錄 Web.Config
<requestFiltering>
<fileExtensions allowUnlisted="false">
<add fileExtension=".aspx" allowed="true" />
</fileExtensions>
</requestFiltering> |
(看起來相同)
(完)
[研究]IIS 10套用GCB設定路徑圖解(4)要求篩選與其他限制模組
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/
| 類別項次 | 類別 | 項數 | 起訖項次編號 | 合計 |
| 1 | 基本設定 | 7 | No.1 ~ 7 | 53 |
| 2 | 設定驗證與授權 | 5 | No.8 ~ 12 | |
| 3 | ASP.NET設定建議 | 12 | No.13 ~ 24 | |
| 4 | 要求篩選與其他限制模組 | 11 | No.25 ~ 35 | |
| 5 | IIS記錄 | 4 | No.36 ~ 39 | |
| 6 | FTP要求 | 2 | No.40 ~ 41 | |
| 7 | 傳輸加密 | 12 | No.42 ~ 53 |
IIS 10.0 政府組態基準列表
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 25 | TWGCB-04-014-0025 | 要求篩選與其他限制模組 | 允許的內容長度上限 | ▪這項原則設定決定由用戶端傳送至伺服器之HTTP request之長度上限,以位元組為單位 ▪當內容長度超過上限時,IIS將會記錄404.13狀態在日誌檔中 ▪限制允許之內容長度,可避免大量之異常請求而導致網站服務異常,以維持網站可用性,亦可降低遭受緩衝區溢位攻擊之風險 ▪預設值為30,000,000位元組,設為0代表長度無限制 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\要求限制\允許的內容長度上限(位元組) | 30,000,000以下,但須大於0 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 26 | TWGCB-04-014-0026 | 要求篩選與其他限制模組 | URL長度上限 | ▪這項原則設定決定URL字串(不包含查詢字串)之長度上限,以位元組為單位 ▪當URL長度超過上限時,IIS將會記錄404.14狀態在日誌檔中 ▪限制可接受之URL最大長度,可避免因過長之URL導致伺服器異常 ▪預設值為4,096位元組 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\要求限制\URL長度上限(位元組) | 4096以下,但須大於0 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 27 | TWGCB-04-014-0027 | 要求篩選與其他限制模組 | 查詢字串上限 | ▪這項原則設定決定查詢字串之長度上限,以位元組為單位 ▪當查詢字串超過上限時,IIS將會記錄404.15狀態在日誌檔中 ▪設定可接受的查詢字串長度,以避免因過長之查詢字串導致應用程式集區發生異常 ▪預設值為2,048位元組 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\要求限制\查詢字串上限(位元組) | 2048以下,但須大於0 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 28 | TWGCB-04-014-0028 | 要求篩選與其他限制模組 | 允許高位元字元 | ▪這項原則設定決定查詢字串是否允許使用高位元字元(非ASCII字元)。高位元字元之範例包括:Ж、Ы或Я ▪當查詢字串因含有高位元字元而被拒絕時,IIS將會記錄404.12狀態在日誌檔中 ▪禁止使用高位元字元,可確保URL中不會出現非ASCII文字,以避免發生輸入特殊字元或跳脫命令字元等攻擊語法 ▪預設值為允許高位元字元 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許高位元字元」 | 不允許 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 29 | TWGCB-04-014-0029 | 要求篩選與其他限制模組 | 允許雙重逸出 | ▪這項原則設定決定是否允許URL雙重逸出,即是否允許URL請求使用雙重編碼技術 ▪有些網站攻擊可以將URL請求利用雙重編碼技術(例如將”../”雙重編碼成為"%252E%252E%252F"),以繞過安全防護機制或造成應用程式非預期之反應 ▪設定為不允許雙重逸出時,IIS會將URL請求利用正規化(Normalize)加以還原其原字元,並執行兩次,如第一次與第二次之結果不同,該請求就會被拒絕,並記錄404.11狀態在日誌檔中 ▪預設值為不允許 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許雙重逸出」 | 不允許 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 30 | TWGCB-04-014-0030 | 要求篩選與其他限制模組 | HTTP TRACE方法 | ▪這項原則設定決定允許或拒絕使用HTTP TRACE方法 ▪HTTP TRACE方法會傳回用戶端提交的HTTP請求內容,攻擊者可利用此方法繞過HttpOnly限制,來存取HTTP標頭中所包含的機敏資訊(如驗證資料或Cookie) ▪預設值為允許 |
伺服器 | IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\HTTP指令動詞\動作\拒絕指令動詞\輸入「TRACE」 | 拒 絕 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 31 | TWGCB-04-014-0031 | 要求篩選與其他限制模組 | 允許未列出的副檔名 | ▪這項原則設定決定是否允許未列出的副檔名在網頁伺服器上被執行 ▪限制網頁伺服器只能執行特定之檔案類型,可提升安全性 ▪在取消勾選「允許未列出的副檔名」後,必須將網站中所有使用到之副檔名(例如:.asax、.cs及.html等)加入允許清單,網頁才能正常運作 |
伺服器 | ▪取消勾選: IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許未列出的副檔名」 ▪新增允許副檔名: IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\允許副檔名 |
不允許 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 32 | TWGCB-04-014-0032 | 要求篩選與其他限制模組 | 處理常式權限 | ▪這項原則設定決定處理常式(Handler)可賦予之權限(包含無、讀取、寫入、指令碼及執行等5種選項) ▪設定處理常式不可同時具有「寫入」與「執行/指令碼」之權限,以降低在伺服器上執行惡意程式碼之風險 ▪處理常式預設擁有「讀取」與「指令碼」權限 |
伺服器 | IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\handlers\accessPolicy | 不能同時擁有執行/指令碼與寫入權限 |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 33 | TWGCB-04-014-0033 | 要求篩選與其他限制模組 | 允許未指定的ISAPI模組 | ▪這項原則設定決定是否允許未指定之ISAPI模組在此伺服器上執行 ▪不允許未指定之ISAPI模組,可防止惡意使用者將未經授權之ISAPI二進制檔案複製到網頁伺服器中執行,以降低感染惡意程式之風險 |
伺服器 | IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\security\isapiCgiRestriction\notListedIsapisAllowed | False |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 34 | TWGCB-04-014-0034 | 要求篩選與其他限制模組 | 允許未指定的CGI模組 | ▪這項原則設定決定是否允許未指定之CGI擴充模組在伺服器上執行 ▪不允許未指定之CGI模組,可防止惡意使用者執行含有惡意指令碼的CGI程式,以降低感染惡意程式之風險 |
伺服器 | IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\security\isapiCgiRestriction\notListedCgisAllowed | False |
| 項次 | TWGCB-ID | 類別 | 原則設定名稱 | 說明 | 設定位置 | 設定路徑 | GCB設定值 |
| 35 | TWGCB-04-014-0035 | 要求篩選與其他限制模組 | 動態IP限制 | ▪這項原則設定決定是否藉由限制同一IP同時開啟連線數或限制同一IP在一段期間內發送之最大要求數量 ▪透過動態IP限制功能,當超過限制時,IIS就暫時不處理來自該IP的請求,直接傳回HTTP錯誤以節省資源,不再耗費頻寬或CPU、記憶體處理要求,可降低DDoS攻擊影響 ▪動態IP限制預設為停用 |
伺服器 | IIS管理員\伺服器\IIS\IP位址及網域限制\動作\開啟功能\動作\編輯動態限制設定 | 啟用動態IP限制功能,並依需求設定「根據同時要求的數目拒絕IP位址」與「根據超過一段時間之要求數目拒絕IP位址」參數 |
【動態 IP 限制設定】
「根據同時要求的數目拒絕IP位址(C)」
「同時要求的最大數目(N)」:5
「根據超過一段時間之要求數目拒絕 IP位址(R)」
「要求的最大數目(M)」:20
「時間間隔(以毫秒表示)(T)」:200
這兩者超過會回應 HTTP 403.502 – Forbidden (Dynamic IP Restriction)
「僅啟用記錄模式(L)」:規定如果違反了前面的規則之一,則記錄該事件,並允許請求而不是拒絕請求。
[研究]GCB,IIS 「IP位址及網域限制」的「動態 IP 限制設定」
如果一定要設,敝人會設定很大的值吧,避免使用者無法使用系統,避免業務相關工作無法進行。