在 IIS 中設定要求篩選
本文件說明如何使用一般要求篩選設定來改善 IIS 8 網頁伺服器的安全性。
要求篩選條件會限制 IIS 8 所處理的 HTTP 要求類型。 藉由封鎖特定的 HTTP 要求,要求篩選有助於防止潛在的有害要求到達伺服器。 要求篩選模組會掃描連入要求,並根據您設定的規則拒絕不想要的要求。
根據預設,IIS 會拒絕流覽重要程式碼區段的要求。 它也會拒絕某些擴展名的要求。
您可以在全伺服器層級設定要求篩選,然後在網站層級覆寫設定。
必要條件
若要充分利用本教學課程,您必須能夠存取執行下列其中一個操作系統的計算機:
- Windows Server® 2012
- Windows® 8
一般要求篩選設定
一般設定包括下列設定:
- 是否允許存取擴展名未列於要求篩選條件的檔案。
- 是否允許使用未列出的 HTTP 動詞命令的要求。
- 是否允許包含高位字元 (非 ASCII) 的要求。
- 是否允許雙重編碼的要求。
- 所要求的內容長度上限。
- URL 的最大長度。
- 查詢字串的大小上限。
使用UI設定一般要求篩選選項
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 在 [動作] 窗格中,按一下 [編輯功能設定] 。
- 在 [ 編輯要求篩選設定 ] 對話框中,視需要編輯設定,然後按兩下 [ 確定]。
使用命令行設定一般要求篩選選項
設定高位字元
若要設定高位字元,請使用下列語法:
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設定擴展名
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [ 擴展名] 索引標籤。
- 在 [動作] 窗格中,按兩下 [允許擴展名] 或 [拒絕擴展名]。
- 在方塊中輸入擴展名,然後按兩下 [ 確定]。
使用命令行設定擴展名
設定未列出的擴展名
若要設定 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 可讓您定義套用至傳入要求的自定義篩選規則。 使用這項功能,您可以定義可以執行下列動作的篩選:
- 掃描要求URL。
- 掃描 URL 中包含的查詢字串。
- 掃描特定標頭欄位。
- 定義篩選套用的擴展名。
- 定義您想要拒絕的字串。
使用UI設定篩選規則
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [規則] 索引 標籤 。
- 在 [ 動作] 窗格中,按兩下 [新增篩選規則]。
- 在 [ 名稱] 方塊中,輸入篩選規則的名稱。
- 如果您想要掃描 URL,請選取 [ 掃描 URL ] 複選框。
- 如果您要掃描查詢字串,請選取 [ 掃描查詢字串 ] 複選框。
- 在 [掃描標頭] 底下,輸入一或多個要掃描的標頭。
- 在 [套用至] 下,輸入規則所套用的一或多個擴展名。
- 在 [ 拒絕字串] 底下,輸入您想要拒絕的一或多個字符串。
- 按一下 [確定]。
隱藏區段
此功能可讓您拒絕包含 URL 區段的要求(例如資料夾名稱)。
使用UI設定隱藏區段
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [ 隱藏區段] 索引標籤 。
- 在 [ 動作] 窗格中,按兩下 [ 新增隱藏區段]。
- 在方塊中輸入 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篩選
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [URL] 索引 標籤 。
- 在 [ 動作] 窗格中,選取 [ 允許 URL ] 或 [拒絕順序]。
- 在方塊中輸入 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 動詞
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [ HTTP 動詞] 索引標籤 。
- 在 [動作] 窗格中,按兩下 [允許動詞] 或 [拒絕動詞命令]。
- 在方塊中輸入動詞,然後按兩下 [ 確定]。
使用命令行設定未列出的 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設定標頭大小限制
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [ 標頭] 索引 卷標,然後按兩下 [ 新增標頭]。
- 在 [ 標頭 ] 方塊中,輸入標頭功能變數名稱。
- 在 [ 大小限制 ] 方塊中,輸入正整數,表示位元組的標頭大小限制。
- 按一下 [確定]。
查詢字串
您可以將 IIS 8 設定為允許或拒絕要求 URL 中包含的特定查詢字串。 例如,如果在要求 URL 中找到拒絕的查詢字串,則會拒絕要求。
使用UI設定查詢字串
- 開啟 IIS 管理員,然後選取您要設定要求篩選的層級。
- 在 [功能檢視] 中,按兩下 [要求篩選]。
- 選取 [查詢字串] 索引標籤,然後按兩下 [允許查詢字串] 或 [拒絕查詢字串]。
- 在 [ 查詢字串 ] 方塊中,輸入查詢字串。
- 按一下 [確定]。
要求篩選記錄
您可以使用 IIS 記錄來評估和優化您的要求篩選組態。
下表顯示您在記錄中看到的要求篩選錯誤碼:
錯誤描述 | 狀態碼 |
---|---|
要求篩選:URL 順序遭拒 | 404.5 |
要求篩選:動詞拒絕 | 404.6 |
要求篩選:拒絕擴展名 | 404.7 |
要求篩選:隱藏區段拒絕 | 404.8 |
要求篩選:拒絕,因為URL重複逸出 | 404.11 |
要求篩選:因為高位字元而遭到拒絕 | 404.12 |
要求篩選:因為 URL 太長而遭到拒絕 | 404.14 |
要求篩選:拒絕,因為查詢字串太長 | 404.15 |
要求篩選:因為內容長度太大而遭到拒絕 | 413.1 |
要求篩選:拒絕,因為要求標頭太長。 | 431 |