[研究]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 |
✅ 正常 |
| 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)
✅ 勾選「允許未列出的指令動詞」
- 不額外限制 Verb
- 把安全重點放在:
- 副檔名白名單
- 不需要的 Handler / Module
✔ 若要加強資安(仍是 WebForms)
七、一句話總結
- 「指令動詞」就是 HTTP Method(GET / POST / PUT…)
- 預設,勾選 = 放行未知動詞(相容性高)
- 不勾選 = 嚴格白名單(安全性高,但易誤擋)
(完)