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…)
  • 預設,勾選 = 放行未知動詞(相容性高)
  • 不勾選 = 嚴格白名單(安全性高,但易誤擋)

(完)

沒有留言:

張貼留言