在 IIS 中設定要求篩選

基思·紐曼和羅伯特·麥克默里

本文件說明如何使用一般要求篩選設定來改善 IIS 8 網頁伺服器的安全性。

要求篩選條件會限制 IIS 8 所處理的 HTTP 要求類型。 藉由封鎖特定的 HTTP 要求,要求篩選有助於防止潛在的有害要求到達伺服器。 要求篩選模組會掃描連入要求,並根據您設定的規則拒絕不想要的要求。

根據預設,IIS 會拒絕流覽重要程式碼區段的要求。 它也會拒絕某些擴展名的要求。

您可以在全伺服器層級設定要求篩選,然後在網站層級覆寫設定。

必要條件

若要充分利用本教學課程,您必須能夠存取執行下列其中一個操作系統的計算機:

  • Windows Server® 2012
  • Windows® 8

一般要求篩選條件 設定

一般設定包括下列設定:

  1. 是否允許存取擴展名未列於要求篩選條件的檔案。
  2. 是否允許使用未列出的 HTTP 動詞命令的要求。
  3. 是否允許包含高位字元 (非 ASCII) 的要求。
  4. 是否允許雙重編碼的要求。
  5. 所要求的內容長度上限。
  6. URL 的最大長度。
  7. 查詢字串的大小上限。

使用UI設定一般要求篩選選項

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 在 [動作] 窗格中,按一下 [編輯功能設定]
  4. 在 [編輯要求篩選 設定] 對話框中,視需要編輯設定,然後按兩下 [確定]。

使用命令行設定一般要求篩選選項

設定高位字元

若要設定高位字元,請使用下列語法:

appcmd set config /section:requestfiltering /allowhighbitcharacters:true|false

例如,若要允許高位字元,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /allowhighbitcharacters:true

設定雙重逸出

若要設定雙重逸出,請使用下列語法:

appcmd set config /section:requestfiltering /allowdoubleescaping:true|false

例如,若要啟用雙重逸出,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /allowdoubleescaping:true

設定允許的內容長度上限

若要設定允許內容長度上限的值,請使用下列語法:

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:單位

requestlimits.maxallowedcontentlength:變數單位會指定內容的最大長度。

例如,若要將 300000000 指定為內容的最大長度,請在命令提示字元中輸入下列內容,然後按 ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:30000000

設定允許的 URL 長度上限

若要設定傳入 URL 允許長度上限的值,請使用下列語法:

appcmd set config /section:requestfiltering /requestlimits.maxurl:單位

requestlimits.maxurl:變數單位會指定傳入 URL 的最大長度。

例如,若要將 4096 指定為傳入 URL 長度上限,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxurl:4096

設定允許的查詢字串長度上限

若要為傳入查詢字串允許的最大長度設定值,請使用下列語法:

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:單位

requestlimits.maxquertystring:變數單位會指定傳入查詢字串的最大長度。

例如,若要將 2048 指定為傳入查詢字串上限,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /requestlimits.maxquerystring:2048

設定 HTTP 標頭的大小上限

若要設定特定 HTTP 標頭的大小限制,請使用下列語法:

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='字串',sizelimit='單位']

header=變數字串會指定套用此限制的標頭。 sizelimit=變數單位會指定此標頭的大小上限。

例如,若要為包含 contoso.com 值的標頭指定大小上限 2048,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='contoso.com',sizelimit='2048']

副檔名

針對您新增的每個擴展名,您可以指出是否要允許或拒絕該文件類型的要求。

使用UI設定擴展名

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [ 擴展名] 索引標籤。
  4. 在 [動作] 窗格中,按兩下 [允許擴展名] 或 [拒絕擴展名]。
  5. 在方塊中輸入擴展名,然後按兩下 [ 確定]。

使用命令行設定擴展名

設定未列出的擴展名

若要設定 IIS 如何處理未列出的擴展名,請使用下列語法:

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:true|false

例如,若要拒絕未列出的擴展名,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:false

設定 WebDAV 要求

若要設定擴展名是否適用於 WebDAV 要求,請使用下列語法:

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:true|false

例如,若要設定 IIS,讓擴展名不適用於 WebDAV 要求,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:false

新增或移除擴展名

若要新增擴展名,請使用下列語法:

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='string',allowed='true | false']

fileextension=變數字串是您想要允許或拒絕的擴展名。

例如,若要新增擴展名為 .xxx 的允許規則,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='.xxx',allowed='true']

若要移除擴展名為 .xxx 的規則,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /-fileExtensions.[fileextension='.xxx']

篩選規則

IIS 8 可讓您定義套用至傳入要求的自定義篩選規則。 使用這項功能,您可以定義可以執行下列動作的篩選:

  1. 掃描要求URL。
  2. 掃描 URL 中包含的查詢字串。
  3. 掃描特定標頭欄位。
  4. 定義篩選套用的擴展名。
  5. 定義您想要拒絕的字串。

使用UI設定篩選規則

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [規則] 索引 標籤
  4. 在 [ 動作] 窗格中,按兩下 [新增篩選規則]。
  5. 在 [ 名稱] 方塊中,輸入篩選規則的名稱。
  6. 如果您想要掃描 URL,請選取 [ 掃描 URL ] 複選框。
  7. 如果您要掃描查詢字串,請選取 [ 掃描查詢字串 ] 複選框。
  8. 在 [掃描標頭] 底下,輸入一或多個要掃描的標頭。
  9. 在 [套用至],輸入規則所套用的一或多個擴展名。
  10. 在 [ 拒絕字串] 底下,輸入您想要拒絕的一或多個字符串。
  11. 按一下 [確定]

隱藏區段

此功能可讓您拒絕包含 URL 區段的要求(例如資料夾名稱)。

使用UI設定隱藏區段

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [ 隱藏區段] 索引標籤
  4. 在 [ 動作] 窗格中,按兩下 [ 新增隱藏區段]。
  5. 在方塊中輸入 URL 區段,然後按兩下 [ 確定]。

使用命令行設定隱藏區段

設定 WebDAV 要求

若要設定隱藏區段是否適用於 WebDAV 要求,請使用下列語法:

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:true|false

例如,若要設定 IIS,讓隱藏區段不適用於 WebDAV 要求,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:false

新增隱藏區段

若要設定隱藏區段,請使用下列語法:

appcmd set config /section:requestfiltering /+hiddensegments.[segment='string']

segment=變數字串會指定隱藏的URL區段。

例如,若要指定 /bin 是隱藏區段,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /+hiddensegments.[segment='/bin']

URL 篩選

您可以將 IIS 設定為接受指定的網址。 此外,您可以將它設定為拒絕指定的 URL 序列。

使用UI設定URL篩選

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [URL] 索引 標籤
  4. 在 [ 動作] 窗格中,選取 [ 允許 URL ] 或 [拒絕順序]。
  5. 在方塊中輸入 URL 或 URL 序列,然後按兩下 [ 確定]。

使用命令行設定 URL 篩選

若要拒絕 URL 序列,請使用下列語法:

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='string']

sequence=變數字串會指定 URL 中永遠不允許 IIS 剖析的字元序列。

例如,若要指定 IIS 永遠不會剖析包含兩個句點的 URL,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='..']

HTTP 指令動詞

您可以定義 IIS 8 接受作為要求一部分的動詞清單。 當 IIS 根據這項功能拒絕要求時,記錄的錯誤碼是 404.6。

使用UI設定未列出的 HTTP 動詞

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [ HTTP 動詞] 索引標籤
  4. 在 [動作] 窗格中,按兩下 [允許動詞] 或 [拒絕動詞命令]。
  5. 在方塊中輸入動詞,然後按兩下 [ 確定]。

使用命令行設定未列出的 HTTP 動詞

設定未列出的 HTTP 動詞

若要設定 IIS 如何處理未列出的動詞,請使用下列語法:

appcmd set config /section:requestfiltering /verbs.allowunlisted:true|false

例如,若要拒絕未列出的動詞,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /verbs.allowunlisted:false

設定 WebDAV 要求

若要設定動詞篩選是否適用於 WebDAV 要求,請使用下列語法:

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:true|false

例如,若要設定 IIS,讓動詞篩選不適用於 WebDAV 要求,請在命令提示字元中輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /verbs.applyToWebDAV:false

新增 HTTP 動詞命令

若要設定動詞來篩選,請使用下列語法:

appcmd set config /section:requestfiltering /+verbs.[verb='string',allowed='true|false']

verb=變數字串會指定套用此限制的動詞。

例如,若要指定允許 GET,請在命令提示字元輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /+verbs.[verb='GET',allowed='true']

標頭大小限制

您可以限制 HTTP 要求標頭的大小,以改善效能和安全性。 標頭是定義 HTTP 交易作業參數的名稱 / 值組。

使用UI設定標頭大小限制

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [ 標頭] 索引 卷標,然後按兩下 [ 新增標頭]。
  4. 在 [ 標頭 ] 方塊中,輸入標頭功能變數名稱。
  5. 在 [ 大小限制 ] 方塊中,輸入正整數,表示位元組的標頭大小限制。
  6. 按一下 [確定]

查詢字串

您可以將 IIS 8 設定為允許或拒絕要求 URL 中包含的特定查詢字串。 例如,如果在要求 URL 中找到拒絕的查詢字串,則會拒絕要求。

使用UI設定查詢字串

  1. 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
  2. 在 [功能檢視] 中,按兩下 [要求篩選]。
  3. 選取 [查詢字串] 索引標籤,然後按兩下 [允許查詢字串] 或 [拒絕查詢字串]。
  4. 在 [ 查詢字串 ] 方塊中,輸入查詢字串。
  5. 按一下 [確定]

要求篩選記錄

您可以使用 IIS 記錄來評估和優化您的要求篩選組態。

下表顯示您在記錄中看到的要求篩選錯誤碼:

錯誤描述 狀態碼
要求篩選:URL 順序遭拒 404.5
要求篩選:動詞拒絕 404.6
要求篩選:拒絕擴展名 404.7
要求篩選:隱藏區段拒絕 404.8
要求篩選:拒絕,因為URL重複逸出 404.11
要求篩選:因為高位字元而遭到拒絕 404.12
要求篩選:因為 URL 太長而遭到拒絕 404.14
要求篩選:拒絕,因為查詢字串太長 404.15
要求篩選:因為內容長度太大而遭到拒絕 413.1
要求篩選:拒絕,因為要求標頭太長。 431

另請參閱