iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
自我挑戰組

30天 IIS 面面觀系列 第 18

Day18. You should not pass - Request Filtering

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20221003/20142057qAAGQFxyol.jpg
甘道夫,我的超人。

IIS 本身的工作主要負責於將到這台的 Request,正確的導到對應的地方 - 對應的地方可不只有網站,也可能進來是想要壞壞的東西,那 IIS 是有一些設定,可以做一層過濾阻擋的效果,像甘道夫擋住炎魔一樣,守護我們的 Application,今天就會分享其中一個模組。

今天要聊的模組是 Request Filtering ,在畫面中圈起來的地方可以設定。一樣你可以依使用情境決定要設定在整個 IIS Level 還是 By Site 去做設定。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057JR5xwFcktu.png

如果你是有比較早期 IIS 使用經驗的人,可能會聽過 URL Scan 這個擴充模組(UrlScan Overview),基本上在最新版本這個模組在官方已經找不太到載點了,最多剩下設定檔可以參考,如果你想翻翻看 UrlScan.ini 的話請參考這裡,我簡單截個圖給大家看一下裡面包含什麼設定。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057tH8bIEM2Z0.png

裡面基本上每個功能後面都有註解寫說該功能在做什麼,什麼值代表什麼意思,模組就會去讀該值並在 IIS 上套用相關設定。你仔細看看裡面的功能,再比對 Request Filtering 的畫面的話,你會發現:哇,其實幾乎都有!

https://ithelp.ithome.com.tw/upload/images/20221003/20142057oL0pMqHHeU.png

沒錯,在新版本裡基本上 Request Filtering 可以完整取代 UrlScan 過去的功能,設定也都直接在介面上能夠做調整。Request Filtering 的處理邏輯基本上就是當 Request 進來時,紅線畫的那條就是能夠設定的過濾項目。像圖中的 File Name Extensions 是能夠對特定副檔名的請求作個別的允許或禁止的設定,沒有禁止基本就預設允許。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057bNG5jgfg3i.png

Hidden Segments 的用途是在目錄瀏覽模式下,不會顯示在目錄中的檔案,如圖中預設的基本都是 App 相關設定檔 / 執行檔,可以對一些預期不公開的檔案做設定。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057FQYJ1brcwI.png

Url 基本上也是不禁止就是允許,如果你有特定不允許被主動訪問的路徑可以透過這個方式做設定。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057hMWThbtCJo.png

也可以對特定的 HTTP Verbs 做存取,如不允許使用 Get 來訪問,純粹作為 API 接口服務的存在。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057eJE64A8Sjz.png

其實像這種透過模組設定特定禁止行為,基本上 IIS 在你還是執意訪問的時候顯示的錯誤訊息都足夠清楚,如上圖就是在禁止 GET 的 HTTP Verb 後仍用 GET 方式訪問的截圖,錯誤代碼為 404.6,下面也明寫了就是因為 Request Filtering 阻擋了 HTTP Verb 導致。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057wzmmHDobdk.png

Header 的頁面則是能夠對特定的 Header 大小做一定限制,超過限制就會被阻擋下來。

https://ithelp.ithome.com.tw/upload/images/20221003/201420571WwFyVoAsf.png

Query String 是網頁在用 GET 方式的時候常用來傳遞資訊的一個手段,如果你有想要對特定的 Query String 做過濾,這個頁面可以幫助到你。

大家應該有發現我刻意漏講了一個 Tab,Rules。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057hP8x1etwmk.png

Rules 最重要的就是那個 s,基本上就是包山包海你可以參在一起做撒尿牛丸,喔不,我是說你可以把全部你想掛的阻擋條件複合調整,做出更細緻層級的安全性設定。

除了這些分頁,Request Filtering 還有一個右側的 Edit Feature Setting 容易被大家忽略,我們還是來看一下它的內容:

https://ithelp.ithome.com.tw/upload/images/20221003/20142057I4raI1fWrS.png

這邊可以看到我們剛剛提到的一些分頁中,包含 file name extensions / http verbs,在沒有表列的時候的行為會是允許還是禁止是在這邊決定的,我上面的描述是根據預設,基本上預設都是沒有禁止就是允許。High-bit characters 是指一些比較少見的字元,如 Ж, Ы, Я,如果你用不到想擋掉也無妨。關於 double escaping 他主要是去阻擋 double encoded 的行為,可以簡單理解為開啟的話會有被對應方式攻擊的風險,在好的 Application Practice 下,這種類型的設計應該被避免,讓這個設定可以維持關閉就好。

下半部的三個偶爾會引發一些問題,最主要是在 GET 的 Request 中嘗試用 Token / QueryString 的方式挾帶過多資料,再加上 encode 之後,可能會超過這邊預設的限制:2048,就要過來這邊調整。如果過長,通常會看到的錯誤是 404.15。調整前要先辨別一下,該長度的 Request 是你的預期行為,還是因為錯誤的重複轉導而導致異常長度,確定問題才能更好的作對應的調整。注意如果是 .NET 的 APP, IIS 這裡有一層設定要改以外,.NET 自己也有 Query String 的長度規範,記得也要去確認對應設定,會在 Config 的 system.web/httpRuntime 底下的屬性 maxQueryStringLength。

有些模組沒列出來,但是能在 Configuration Editor 做到的功能,也值得一看。如上面說的 maxQueryStringLength 其實你按照上面的路徑就能找到設定的地方,不用自己手動去用文字編輯器改 config 檔案。我們來看看 Request Filtering 在 Configuration Editor 的介面裡還提供了什麼樣的功能,對應路徑會在 webserver / security / requestFiltering。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057SFU3QjbuaB.png

https://ithelp.ithome.com.tw/upload/images/20221003/20142057TcK9AQGgt0.png

其實大多 UI 都有提供修改介面,僅有畫面上我畫紅線畫起來的是需要在這邊做設定的。

removeServerHeader 是移除一個 IIS 內建會附加上叫做 Server 的 Header,你可以嘗試用 Developer tool 去抓一下 network 查看,就會看到這個,移除沒太大影響。

https://ithelp.ithome.com.tw/upload/images/20221003/20142057PtCYTK0lrx.png

unescapeQueryString 主要關係到掃描 query string 是否為過濾對象的行為,如果這個值設為 true,則會總共做兩次掃描確認。第一次會是直接掃 raw query string,第二次會掃解碼後的 query string。

關於 Request Filtering 這個模組大概就是這樣,讓你能夠設定網站允許存取的方式,阻擋掉惡意的攻擊,提升網站安全性。如果你維護的網站有在做弱點掃描,可能就會被要求要來更改一些本文提及的設定。


上一篇
Day17. 我是誰 - Authentication
下一篇
Day19. 人要衣裝,佛要金裝 - Error Page, Directory Browsing, Default Document
系列文
30天 IIS 面面觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言