顯示具有 要求篩選 標籤的文章。 顯示所有文章
顯示具有 要求篩選 標籤的文章。 顯示所有文章

2026年1月23日 星期五

[研究]GCB,IIS,"要求篩選","允許未列出的副檔名"取消勾選,"允許副檔名" 首頁處理

[研究]GCB,IIS,"要求篩選","允許未列出的副檔名"取消勾選,"允許副檔名" 首頁處理

2026-01-23

.aspx 加入允許名單

下圖,同一個網站,https://localhost/default.aspx  正常


下圖,同一個網站,https://localhost/  被攔截了



下圖,解決方法,新增一個 "." (句點),沒有副檔名名稱的檔案

下圖,否則網站有設定預設首頁也沒用

(完)

[研究]IIS 10.0 GCB,"要求篩選","允許未列出的指令動詞" 變成不勾選

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

關聯影響有空再研究、、、

(待研究)



2026年1月21日 星期三

[研究]IIS,要求篩選,"允許未列出的指令動詞",甚麼是 "指令動詞" ? 勾選、不勾選 的意義? 影響 ?

[研究]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 不勾選 的實際差異

✅ 勾選「允許未列出的指令動詞」(預設值)

行為

  • IIS 只封鎖你明確拒絕的動詞
  • 其餘 HTTP Method 全部接受

特性

  • 相容性高
  • 比較不會誤擋應用程式
  • 安全性較鬆

適合

  • 傳統 ASP.NET WebForms / MVC
  • 舊系統、不確定會用到哪些 Method
  • 沒有對外 API 的網站

❌ 不勾選「允許未列出的指令動詞」

行為

  • IIS 採用「白名單模式」
  • 只允許「允許指令動詞」清單中的 Method
  • 其他一律 404.6 / 405

特性

  • 安全性高
  • 但容易擋到功能

適合

  • 對外 API
  • 高資安要求系統
  • 明確知道只用 GET / POST 的網站

四、實際影響範例

情境 1:只允許 GET、POST

IIS 設定:

  • ❌ 不勾選「允許未列出的指令動詞」
  • 允許指令動詞:
    • GET
    • POST

結果

動詞 結果
GET ✅ 正常
POST ✅ 正常
HEAD ❌ 404.6
OPTIONS ❌ 404.6
PUT ❌ 404.6

⚠ HEAD / OPTIONS 被擋,可能造成:

  • 健康檢查失敗
  • CORS 問題
  • 某些瀏覽器行為異常

五、與常見 IIS 錯誤碼的關係

HTTP 錯誤 意義
404.6 指令動詞被要求篩選拒絕
405 動詞不被該資源支援
404.7 副檔名被拒絕(不是動詞問題)

👉 404.6 = 動詞問題

👉 404.7 = 副檔名問題


六、實務建議(給 ASP.NET WebForms)

✔ 一般 WebForms 網站(非 API)

✅ 勾選「允許未列出的指令動詞」

  • 不額外限制 Verb
  • 把安全重點放在:
    • 副檔名白名單
    • 不需要的 Handler / Module

✔ 若要加強資安(仍是 WebForms)

  • 不勾選
  • 至少允許
    • GET
    • POST
    • HEAD
    • OPTIONS

七、一句話總結

  • 「指令動詞」就是 HTTP Method(GET / POST / PUT…)
  • 預設,勾選 = 放行未知動詞(相容性高)
  • 不勾選 = 嚴格白名單(安全性高,但易誤擋)

(完)

2026年1月20日 星期二

[研究]IIS 10.0 GCB,"要求篩選" 更新 "允許副檔名" 羅生門

[研究]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 檔案(二)

[研究]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 後,仍無法運作,變成另一種問題。


****************************************
和 ChatGPT 談很久,總結它的觀點

「不用加入白名單的 .axd」,其實只限於 ASP.NET 內建的 HTTP Handler 處理的動態資源 WebResource.axd 和 ScriptResource.axd

非 ASP.NET WebForm 架構內建的 HTTP Handler 處理,而是自己程式中的 URL 的 .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 動態生成的檔案,副檔名都不用加入"允許副檔名" 名單嗎?

[研究]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 常見動態檔案副檔名

副檔名用途是否需要加入允許副檔名
.axdScriptResource、WebResource、Trace.axd❌ 不需要
.ashx自訂 HTTP Handler❌ 不需要
.asmxWeb Service❌ 不需要
.svcWCF Service❌ 不需要
.jsonWebMethod / Web API 回傳❌ 不需要(由 ASP.NET 處理)
.configweb.config、machine.config⚠️ 靜態檔案敏感,通常不能直接存取 → IIS 會封鎖
.aspx / .ascx / .masterWebForms 頁面或控制項❌ 不需要,只要 ASP.NET pipeline 正常
.cs / .vb原始碼檔案❌ 靜態檔案,不應該允許存取
.pdb / .dll編譯結果❌ 靜態檔案,通常封鎖,不加入白名單

🔑 原則:所有由 ASP.NET Handler/Runtime 動態生成的檔案,只要管道正確,IIS 就會交給 ASP.NET 處理,不受副檔名白名單影響。

3️⃣ 什麼情況「需要手動加入」副檔名?

  1. 自訂的靜態檔案,但副檔名 IIS 不認識(例如 .myext),希望瀏覽器直接讀取
  2. HTTP Handler / Module 配置錯誤,導致 IIS 把動態檔案當成靜態檔擋掉
  3. 極端安全策略:

    • 「允許未列出的副檔名」❌
    • 只有「列出清單」才放行
    • 而自訂 Handler 的副檔名沒有對應 Handler mapping → 才可能需要加白名單

正常情況下,標準 WebForms .axd、.ashx、.asmx 不需要加到白名單。

4️⃣ 總結原則

1.動態副檔名 → 不需要加入允許副檔名

(只要 ASP.NET pipeline 正常)

2.靜態副檔名 → 如果未列在允許清單且「允許未列出的副檔名」❌,就需要加入

(例如 .css、.js、圖片、下載檔)

3.敏感檔案如 .config、.pdb、.cs 不要加入白名單,否則安全風險大

(完)

[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,實測 .axd 檔案(一)

[研究]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 檔案,例如:

  • ScriptResource.axd?d=xxxx → WebForms 內嵌 JavaScript
  • WebResource.axd?d=xxxx → 自訂或第三方嵌入資源

2.UpdatePanel:使用 Ajax 局部更新時,也會向 .axd 發送請求。

3.動態檔案 .axd:

  • IIS 並不會在磁碟產生真實檔案。
  • 它是 ASP.NET 處理管線 (HTTP Handler) 生成的動態回應。
  • FREB(失敗要求追蹤)能夠捕捉這些請求,包括 URL、查詢字串、HTTP Header、狀態碼等。

4/點擊 更新 Label,瀏覽器會發送對 .axd 的請求,且可以在瀏覽器 Network tab 看到,例如:

  • http://localhost:1234/WebResource.axd?d=xxxx&t=yyyy
  • http://localhost:1234/ScriptResource.axd?d=xxxx

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

Visual Studio 2019 中做 Deploy 到 IIS 網站,

「網站」層級


僅新增 .aspx 允許 (沒允許 .axd),測試網站

下圖,按下按鈕後


沒允許 .axd 好像沒關係?

********************************************************************************
IIS "要求篩選" "允許未列出的副檔名" 不勾選, 若 ASP.NET WebForm 會產生 .axd,需要把 .axd 加入 "允許副檔名" 名單嗎?

ChatGPT

結論先講:通常「不用」手動把 .axd 加入 IIS「要求篩選 → 允許副檔名」名單,只要你的站台是正常的 ASP.NET WebForms / ASP.NET 管線,.axd 會被放行。

下面把原因與「什麼情況才需要加」講清楚。

為什麼「不用加 .axd」?

.axd 不是一般靜態檔案,它是:
  • ASP.NET HTTP Handler(例如 ScriptResource.axd、WebResource.axd)
  • 由 ASP.NET Runtime 處理,不是由 IIS 當成實體檔案存取
在 IIS 中的實際流程是:

要求進來 (.axd)
→ 對應到 ASP.NET Handler
→ 由 aspnet_isapi / ASP.NET Core Module 處理
→ 不走「靜態檔案副檔名白名單」那一套

因此:
  • IIS「要求篩選」的「允許副檔名」主要是管「靜態檔案」
  • .axd 屬於「動態處理」 → 不需要列入白名單

微軟預設就是這樣設計的

你可以觀察一個事實:
  1. 在 乾淨的 ASP.NET WebForms 專案
  2. IIS「允許未列出的副檔名」設為 ❌ 不允許
  3. 沒有手動加 .axd
  4. 👉 ScriptResource.axd、WebResource.axd 仍然可以正常下載
這代表:ASP.NET Handler 類型的副檔名,本來就不靠「允許副檔名」存活


什麼情況「可能需要加 .axd」?(少見)

只有在下面「非標準」情況才會遇到問題:

1️⃣ ASP.NET Pipeline 沒有啟用 / 損壞

例如:
  • ASP.NET 角色服務沒裝
  • Application Pool 用錯 .NET CLR
  • Handler mapping 被刪掉
此時 .axd 會被當成「未知副檔名的靜態檔」
→ 才會被要求篩選擋掉

👉 正確作法是修 ASP.NET 設定,不是加 .axd

2️⃣ 使用極端「封鎖一切」的自訂安全規則

例如:
  • URL Rewrite / Request Filtering 規則強制封鎖所有未明確白名單的 URL
  • WAF / 反向代理層阻擋 .axd
這不是 IIS 的標準行為,而是 額外安全設備或規則

實務建議(重點)
✅ 正確作法
  • 不要把 .axd 當成一般副檔名管理
  • 確保:
    • ASP.NET 已正確安裝
    • Handler Mappings 存在
    • Application Pool 的 .NET CLR 正確
❌ 不建議
  • 為了怕被擋就亂加 .axd
  • 把所有「動態副檔名」都加進允許清單
這樣會讓:
  • 副檔名白名單失去意義
  • 安全性反而下降

一句話總結
  • IIS「允許未列出的副檔名」不勾選時,ASP.NET WebForms 產生的 .axd
  • 正常情況下「不需要」加入「允許副檔名」清單
  • 若被擋,應檢查 ASP.NET Handler / Pipeline,而不是副檔名白名單


後續

[研究]IIS 10.0 GCB,"要求篩選","允許未列出的副檔名" 不勾選,ASP.NET WebForm 動態生成的檔案,副檔名都不用加入"允許副檔名" 名單嗎?
https://shaurong.blogspot.com/2026/01/iis-100-gcb-aspnet-webform.html

(完)

相關

2026年1月19日 星期一

[研究]實測,GCB,IIS,要求篩選,「允許未列出的副檔名」和「副檔名」列表

[研究]實測,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 檔案,沒有允許也會看不到圖片



測試7:
.css 也要允許才行

測試8:
.dll 不需要允許



(完)

[研究]GCB,IIS,要求篩選,列出某目錄(含子目錄)所有副檔名種類的 .bat,需要明確允許名單

[研究]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 除錯符號檔 ❌ (建議封鎖) 不需要用戶端存取。
.pdf 文件 / 靜態檔案 ✅ 用戶端請求需要允許。
.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 除錯符號檔 ❌ (建議封鎖) 不需要用戶端存取。
.pdf 文件 / 靜態檔案 ✅ 用戶端下載需允許。
.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)。

(完)

相關

[研究]IIS安裝「失敗要求的追蹤規則(IIS Failed Request Tracing(FREB))」

[研究]GCB,要求篩選,IIS安裝「失敗要求的追蹤規則(IIS Failed Request Tracing(FREB))」

2026-01-10

環境:Windows Server 2019 標準版 + IIS 10.0













(完)


2026年1月16日 星期五

[研究]IIS 10.0 GCB,實測 Web.Config 多甚麼 - forms cookieless="UseCookies"

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


相關 No.9、No.18,分別

IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\authentication\forms\cookieless

IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\sessionState\cookieless

No.9 預設「UseDeviceProfile」,GCB建議 UseCookies
No.18 預設值和GCB建議 UseCookies,不會寫 Web.Config

********************************************************************************
No.9  套用後

<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設定值
9TWGCB-04-014-0009設定驗證與授權表單驗證Cookie 模式
  • 這項原則設定決定表單驗證是否使用 Cookie
  • 表單驗證 Cookie 模式選項如下:
    1. UseUri:不使用 Cookie
    2. UseCookies:不論裝置為何,永遠使用 Cookie
    3. AutoDetect:如果裝置設定檔支援 Cookie,則使用 Cookie。否則,不使用 Cookie。針對已知支援 Cookie 之桌面瀏覽器,ASP.NET 會進行檢查以判斷是否啟用 Cookie
    4. UseDeviceProfile:如果裝置設定檔支援 Cookie,則使用Cookie。否則,不使用Cookie。ASP.NET 不會進行檢查來判斷是否要在支援 Cookie之裝置上啟用 Cookie
  • 使用者通過身分驗證登入站台後,表單驗證會在 Cookie 中維護一份驗證資訊,讓已通過驗證的使用者不需要對每個要求都輸入帳號密碼,當 Cookie 過期或找不到有效之 Cookie 時,使用者將被重新導向至指定登入頁面
  • 使用 Cookie 管理使用者連線狀態,可藉由防止 ASP.NET 將Session 資訊透過 URL 傳送,以避免 Session ID 在代理伺服器紀錄檔或瀏覽歷程紀錄中被找到,降低Session 遭竊取之風險
  • 預設設定為「UseDeviceProfile」
站台IIS 管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\authentication\forms\cookielessUseCookies

下圖,cookieless預設值是 UseDeviceProfile

改成 UseCookies後,套用,Web.Config 結果如下



[研究]GCB,IIS,「表單驗證Cookie 模式」從預設值 UseDeviceProfile 改為 GCB 建議值 UseCookies 的影響?
主要影響老舊瀏覽器

[研究]GCB,IIS,「表單驗證Cookie 模式」從預設值 UseDeviceProfile 改為 GCB 建議值 UseCookies後那些套件功能會異常?
https://shaurong.blogspot.com/2025/11/gcbiiscookie-usedeviceprofile-gcb.html
Microsoft.AspNet.FriendlyUrls、ASP.NET Identity、Microsoft.Owin.Security.Cookies、jQuery、Bootstrap.Datepicker、js-cookie、vue 可能異常。

實際檢視某 ASP.NET WebForm 真實系統,該網站cookieless設定值是 UseDeviceProfile。
GCB建議是 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

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

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

No.30

項次TWGCB-ID類別原則設定名稱說明設定位置設定路徑GCB設定值
30TWGCB-04-014-0030要求篩選與其他限制模組HTTP TRACE方法▪這項原則設定決定允許或拒絕使用HTTP TRACE方法
▪HTTP TRACE方法會傳回用戶端提交的HTTP請求內容,攻擊者可利用此方法繞過HttpOnly限制,來存取HTTP標頭中所包含的機敏資訊(如驗證資料或Cookie)
▪預設值為允許
伺服器IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\HTTP指令動詞\動作\拒絕指令動詞\輸入「TRACE」拒
絕


環境TRACE 設定建議
開發機允許(方便 debug,僅內網)
測試機禁用或限制內網使用
正式機禁用(安全性需求)

GCB 建議是「伺服器」層級,修改
%windir%\System32\inetsrv\config\applicationHost.config

「網站」層級是修改 Web.Config,理論上 Web.Config 應該不會被添加。

如果開發機,會用 Burp Suite、REST API測試工具 (例如:Postman) 測試在開發機建立的網站,不要拒絕 TRACE。

(完)

相關

2026年1月13日 星期二

[研究] IIS 10.0 GCB "要求篩選與其他限制模組","允許高位元字元" 實測

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

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設定值
28TWGCB-04-014-0028要求篩選與其他限制模組允許高位元字元▪這項原則設定決定查詢字串是否允許使用高位元字元(非ASCII字元)。高位元字元之範例包括:Ж、Ы或Я
▪當查詢字串因含有高位元字元而被拒絕時,IIS將會記錄404.12狀態在日誌檔中
▪禁止使用高位元字元,可確保URL中不會出現非ASCII文字,以避免發生輸入特殊字元或跳脫命令字元等攻擊語法
▪預設值為允許高位元字元
伺服器IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許高位元字元」不允許



下圖,程式在 Visual Studio 2019 中執行正常 (檔案中文名稱)


下圖,Deploy 後,英文檔案名稱 (Default.aspx ) 正常


下圖,中文名稱的 .aspx 無法執行

**********
HTTP 錯誤 404.12 - Not Found
要求篩選模組設定為拒絕包含高位元字元的要求 URL。

最有可能的原因:
要求包含高位元字元,且網頁伺服器上的要求篩選設定為拒絕高位元字元。

解決方法:
確認 applicationhost.config 或 web.config 檔案中的 configuration/system.webServer/security/requestFiltering@allowHighBitCharacters 設定。

詳細錯誤資訊:
模組    RequestFilteringModule
通知    BeginRequest
處理常式    PageHandlerFactory-Integrated-4.0
錯誤碼    0x00000000
要求的 URL    https://localhost:443/測試.aspx
實體路徑    D:\Production\Test443\測試.aspx
登入方法    尚未判定
登入使用者    尚未判定

詳細資訊:
此為安全性功能。除非完全瞭解變更的範圍,否則請勿變更此功能。當 allowHighBitCharacters 設定為 false (未出現時此值為 true) 時,IIS 會拒絕包含高位元字元的要求。如果伺服器應允許高位元字元,請修改 configuration/system.webServer/security/requestFiltering@allowHighBitCharacters 設定。
檢視詳細資訊 »

**********

下圖,嘗試下載檔案名稱有中文的檔案,失敗

註:有可能需要網站重新啟動 or IIS重新啟動 or Windows 重新啟動。

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

2026-01-15 補

下圖,有人說他測試可以;注意,如果在 Visual Studio 2019 中執行 ASP.NET WebForm,是可以的,那是因為 Visual Studio 中用的 IIS Expresss,不是 IIS 10.0


下圖,Deploy 後,是 IIS 10.0,不是 IIS Express
********************************************************************************
2026-01-16 補

詢問 Gemini AI,

在 IIS 中,**「允許高位元字元」(Allow high-bit characters)**的設定主要用於處理非 ASCII 字元(如中文、日文、韓文或特殊符號)。如果為了支援多語系路徑或參數而勾選「允許」,確實會增加如 字元編碼攻擊(Encoding Attacks) 或 路徑穿越(Path Traversal) 的風險。

針對您的問題,Trend Micro Deep Security (DS) 絕對算是一種強力的資安防護手段。
********************************************************************************
2026-01-16 補

實際測試,設定會立刻生效,不需要重新啟動 網站、IIS 或 Windows。
********************************************************************************
2026-01-16 補

實際測試,「網站」層級設定會覆蓋「伺服器」層級效果。兩者都是修改
C:\Windows\System32\inetsrv\config\applicationHost.config
而非 Web.Config

「伺服器」層級預設是允許,
<requestFiltering allowHighBitCharacters="true">
「伺服器」層級設定為不允許後
<requestFiltering allowHighBitCharacters="false">

「網站」層級很奇怪,實際測試,設定有效果,但 applicationHost.config 和 Web.Config 看不到相對應設定,和 AI 討論不出具體真實原因。

伺服器  網站   網站層級設定結果
true    true   和伺服器相同,不出現
true    false  不出現 <= Why ?
false   true   網站層級預設 true,不出現 
false   false  和伺服器相同,不出現

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

(完)

[研究] IIS 10.0 GCB "要求篩選與其他限制模組","允許未列出的副檔名" 實測

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

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設定值
31TWGCB-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>

(看起來相同)


(完)

2025年11月5日 星期三

[研究]IIS 10套用GCB設定路徑圖解(4)要求篩選與其他限制模組

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

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

類別項次 類別 項數 起訖項次編號 合計
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




項次 25、26、27、29預設值和 GCB 建議值相同,不討論。
項次 28 GCB建議【不勾選「允許高位元字元」】,會導致
  • 網頁請求直接返回 HTTP 404.11 – URL 含有高位元字元
  • 或 HTTP 400 – 錯誤的要求 (Bad Request)
  • URL或URL中檔案名稱含繁體中文、日文、韓文、歐洲語系被禁止
技術面而言,可以修改而符合GCB;實務面而言,最好考慮歷史包袱、有多少地方要改掉、有多少人力、時間可以進行修改。或可考慮

[研究]IIS的「允許高位元字元」無法被 Web.config 覆蓋,為何 HSTS 的 max-age 可被覆蓋?

項次 31 GCB建議【不勾選「允許未列出的副檔名」】,基本上要一開始就100%列出副檔名白名單,是無法保證做到的,故可能會導致某些功能異常,在用戶大量、穩定優先考慮的網站,建議考慮排除。

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

[研究]ASP.NET WebForm 網站,IIS 10 中「要求篩選」畫面預設所列的副檔名用途是甚麼?

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

[研究]IIS的「允許高位元字元」無法被 Web.config 覆蓋,為何 HSTS 的 max-age 可被覆蓋?

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
26 TWGCB-04-014-0026 要求篩選與其他限制模組 URL長度上限 ▪這項原則設定決定URL字串(不包含查詢字串)之長度上限,以位元組為單位
▪當URL長度超過上限時,IIS將會記錄404.14狀態在日誌檔中
▪限制可接受之URL最大長度,可避免因過長之URL導致伺服器異常
▪預設值為4,096位元組
伺服器 IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\要求限制\URL長度上限(位元組) 4096以下,但須大於0

詳見上面項次25說明。
********************************************************************************

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
27 TWGCB-04-014-0027 要求篩選與其他限制模組 查詢字串上限 ▪這項原則設定決定查詢字串之長度上限,以位元組為單位
▪當查詢字串超過上限時,IIS將會記錄404.15狀態在日誌檔中
▪設定可接受的查詢字串長度,以避免因過長之查詢字串導致應用程式集區發生異常
▪預設值為2,048位元組
伺服器 IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\要求限制\查詢字串上限(位元組) 2048以下,但須大於0

詳見上面項次25說明。
********************************************************************************

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
28 TWGCB-04-014-0028 要求篩選與其他限制模組 允許高位元字元 ▪這項原則設定決定查詢字串是否允許使用高位元字元(非ASCII字元)。高位元字元之範例包括:Ж、Ы或Я
▪當查詢字串因含有高位元字元而被拒絕時,IIS將會記錄404.12狀態在日誌檔中
▪禁止使用高位元字元,可確保URL中不會出現非ASCII文字,以避免發生輸入特殊字元或跳脫命令字元等攻擊語法
▪預設值為允許高位元字元
伺服器 IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許高位元字元」 不允許

詳見上面項次25說明。
********************************************************************************

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
29 TWGCB-04-014-0029 要求篩選與其他限制模組 允許雙重逸出 ▪這項原則設定決定是否允許URL雙重逸出,即是否允許URL請求使用雙重編碼技術
▪有些網站攻擊可以將URL請求利用雙重編碼技術(例如將”../”雙重編碼成為"%252E%252E%252F"),以繞過安全防護機制或造成應用程式非預期之反應
▪設定為不允許雙重逸出時,IIS會將URL請求利用正規化(Normalize)加以還原其原字元,並執行兩次,如第一次與第二次之結果不同,該請求就會被拒絕,並記錄404.11狀態在日誌檔中
▪預設值為不允許
伺服器 IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\動作\編輯功能設定\一般\不勾選「允許雙重逸出」 不允許

詳見上面項次25說明。
********************************************************************************

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
30 TWGCB-04-014-0030 要求篩選與其他限制模組 HTTP TRACE方法 ▪這項原則設定決定允許或拒絕使用HTTP TRACE方法
▪HTTP TRACE方法會傳回用戶端提交的HTTP請求內容,攻擊者可利用此方法繞過HttpOnly限制,來存取HTTP標頭中所包含的機敏資訊(如驗證資料或Cookie)
▪預設值為允許
伺服器 IIS管理員\伺服器\IIS\要求篩選\動作\開啟功能\HTTP指令動詞\動作\拒絕指令動詞\輸入「TRACE」 拒
絕





註:要重新啟動 IIS 服務或網站才能生效。

[研究]GCB,IIS 設定「拒絕 TRACE」影響

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

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

詳見上面項次25說明,以及下面說明。

下圖,所有允許的要逐一加入,若有漏,可能就有功能異常。相次31是否要符合 GCB 或排除要考慮。



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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
32 TWGCB-04-014-0032 要求篩選與其他限制模組 處理常式權限 ▪這項原則設定決定處理常式(Handler)可賦予之權限(包含無、讀取、寫入、指令碼及執行等5種選項)
▪設定處理常式不可同時具有「寫入」與「執行/指令碼」之權限,以降低在伺服器上執行惡意程式碼之風險
▪處理常式預設擁有「讀取」與「指令碼」權限
伺服器 IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\handlers\accessPolicy 不能同時擁有執行/指令碼與寫入權限




預設值是【Read,Script】,GCB建議是【不能同時擁有執行/指令碼與寫入權限】,符合。
********************************************************************************

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
33 TWGCB-04-014-0033 要求篩選與其他限制模組 允許未指定的ISAPI模組 ▪這項原則設定決定是否允許未指定之ISAPI模組在此伺服器上執行
▪不允許未指定之ISAPI模組,可防止惡意使用者將未經授權之ISAPI二進制檔案複製到網頁伺服器中執行,以降低感染惡意程式之風險
伺服器 IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\security\isapiCgiRestriction\notListedIsapisAllowed False



預設值和 GCB 相符,都是 False。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
34 TWGCB-04-014-0034 要求篩選與其他限制模組 允許未指定的CGI模組 ▪這項原則設定決定是否允許未指定之CGI擴充模組在伺服器上執行
▪不允許未指定之CGI模組,可防止惡意使用者執行含有惡意指令碼的CGI程式,以降低感染惡意程式之風險
伺服器 IIS管理員\伺服器\管理\設定編輯器\動作\開啟功能\區段\system.webServer\security\isapiCgiRestriction\notListedCgisAllowed False

詳見項次34的圖,預設值和 GCB 相符,都是 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位址」參數

如果沒有此設定功能,參考下面新增

[研究]IIS 10新增「IP位址及網域限制」設定功能

如果有,



上圖幾個欄位的設定數值的限制為 Int64
最小值 (Int64.MinValue) -2^63 = -9,223,372,036,854,775,808
最大值 (Int64.MaxValue) 2^63 - 1 = 9,223,372,036,854,775,807

【動態 IP 限制設定】


「根據同時要求的數目拒絕IP位址(C)」

「同時要求的最大數目(N)」:5


「根據超過一段時間之要求數目拒絕 IP位址(R)」

「要求的最大數目(M)」:20

「時間間隔(以毫秒表示)(T)」:200


這兩者超過會回應 HTTP 403.502 – Forbidden (Dynamic IP Restriction)


「僅啟用記錄模式(L)」:規定如果違反了前面的規則之一,則記錄該事件,並允許請求而不是拒絕請求。


[研究]GCB,IIS 「IP位址及網域限制」的「動態 IP 限制設定」

https://shaurong.blogspot.com/2025/11/gcbiis-ip-ip.html


預設值與 GCB 建議值不符。
預設沒有限制,GCB建議【啟用動態IP限制功能,並依需求設定「根據同時要求的數目拒絕IP位址」與「根據超過一段時間之要求數目拒絕IP位址」參數】,並沒有給建議數值,其實也很難給建議數值,GCB把承擔後果責任丟給 IIS 管理員。設太小若使用者連不上會被抱怨,可能業務相關工作無法進行,設太大不安全,設很大有設和沒設差不多。

「僅啟用記錄模式(L)」預設沒勾選,GCB也沒建議勾選,且勾選後前2設定值超過也會放行,有失去設定的意義。

如果一定要設,敝人會設定很大的值吧,避免使用者無法使用系統,避免業務相關工作無法進行。


********************************************************************************
小結

項次 25、26、27、29、32、33、34 預設值和 GCB 建議值相同,不討論。

項次 28【不勾選「允許高位元字元」】對非純英文網站 (例如:中文網站),建議排除。
項次 30【拒絕 TRACE】正式環境建議設定,開發機建議不要。
項次 31【不勾選「允許未列出的副檔名」】白名單可能無法完善,建議排除。

(完)

相關

[研究]IIS 10套用GCB設定路徑圖解(1)基本設定

[研究]IIS 10套用GCB設定路徑圖解(2)設定驗證與授權

[研究]IIS 10套用GCB設定路徑圖解(3)ASP.NET設定建議

[研究]IIS 10套用GCB設定路徑圖解(4)要求篩選與其他限制模組

[研究]IIS 10套用GCB設定路徑圖解(5)IIS記錄

[研究]IIS 10套用GCB設定路徑圖解(6)FTP要求

[研究]IIS 10套用GCB設定路徑圖解(7)傳輸加密