[研究]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…)
- 預設,勾選 = 放行未知動詞(相容性高)
- 不勾選 = 嚴格白名單(安全性高,但易誤擋)
(完)
沒有留言:
張貼留言