使用要求篩選

由 IIS 小組

簡介

UrlScan 是安全性工具,提供為舊版 Internet Information Services (IIS) 的附加元件,因此系統管理員可以在其 Web 服務器上強制執行更嚴格的安全性原則。 在 IIS 7 和更新版本中,URLScan 的所有核心功能都已併入名為要求篩選的模組,並已新增隱藏區段功能。 本文說明要求篩選的每個功能,並提供如何在環境中套用功能的範例。

請注意,IIS 也包含用於 URL 重寫的模組。 這兩個模組之間有差異:要求篩選是針對安全性案例所設計和優化,而 URL 重寫可以套用到一組廣泛的案例, (安全性案例只是這些) 的子集。 如需差異的詳細資訊,請參閱 IIS 7.0 和更新版本要求篩選和 URL 重寫

篩選Double-Encoded要求

這項功能可防止依賴雙編碼要求的攻擊,如果攻擊者向 IIS 提交經過仔細製作雙編碼的要求,就會套用此攻擊。 啟用雙編碼要求篩選時,IIS 會將 URL 正規化兩次;如果第一個正規化與第二個不同,則會拒絕要求,而記錄的錯誤碼為 404.11。 雙重編碼的要求篩選準則是 UrlScan 中的 VerifyNormalization 選項。

如果您不想讓 IIS 允許提供雙編碼要求,請使用下列專案:

<configuration>
 <system.webServer> 
  <security>
   <requestFiltering
                  allowDoubleEscaping="false">
   </requestFiltering> 
  </security>
 </system.webServer>
</configuration>

篩選高位字元

此功能允許或拒絕包含非 ASCII 字元的 IIS 的所有要求,並記錄錯誤碼 404.12。 UrlScan 對等專案是 AllowHighBitCharacters。

例如,假設您想要允許一個應用程式的高位字元,但不適用於整個伺服器。 在ApplicationHost.config檔案中設定 allowHighBitCharacters=「false」;但在應用程式根目錄中,建立Web.config檔案,讓單一應用程式接受非 ASCII 字元。 在Web.config檔案中,使用:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering
                  allowHighBitCharacters="true"
            >
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

根據副檔名篩選

這項功能會定義 IIS 提供一組允許的副檔名。 當 IIS 根據副檔名拒絕要求時,記錄的錯誤碼為 404.7。 AllowExtensions 和 DenyExtensions 選項是 UrlScan 對等專案。

例如,假設您想要允許 ASP 檔案以外的每種檔案類型。 將 fileExtensions 的 allowUnlisted 選項設定為 「true」,然後定義副檔名專案以明確拒絕 ASP:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".asp" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

根據要求限制篩選

此篩選會結合在 UrlScan) 中具有相同名稱的三個功能 (:

  • maxAllowedContentLength–內容大小的上限
  • url 長度的 maxUrl-上限
  • maxQueryString-上限,其長度為查詢字串

當 IIS 根據要求限制拒絕要求時,記錄的錯誤碼為:

  • 如果內容太長,則為 413.1。
  • 如果 URL 太大,則為 404.14。
  • 如果查詢字串太長,則為 404.15。

例如,公司通常會購買沒有原始程式碼存取權的軟體。 經過一段時間後,他們可能會在該程式碼中發現弱點。 取得受影響程式碼的更新通常不容易。 問題通常是因為 URL 或查詢字串太長,或超過傳送至應用程式的內容所造成。 決定安全上限之後,您可以使用下列組態來套用限制,而不需要修補應用程式二進位檔:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="260"
       maxQueryString="25" 
                  />
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

依動詞篩選

這項功能會定義 IIS 接受做為要求一部分的動詞清單。 當 IIS 根據這項功能拒絕要求時,記錄的錯誤碼為 404.6。 這對應于 UrlScan 中的 UseAllowVerbs、AllowVerbs 和 DenyVerbs 選項。

例如,假設您只想要只允許動詞 GET。 若要設定此設定,您必須先鎖定組態,以允許允許任何動詞,方法是設定 allowUnlisted=「false」 選項。 接下來,列出您想要明確允許的動詞,在此案例中為 GET。

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <verbs
       allowUnlisted="false"
                  >
     <add verb="GET" allowed="true" />
    </verbs>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

根據 URL 序列篩選

這項功能會定義 IIS 在要求屬於要求時拒絕的序列清單。 當 IIS 拒絕此功能的要求時,記錄的錯誤碼為 404.5。這對應于 UrlScan 中的 DenyUrlSequences 功能。

這是非常強大的功能。 使用下列程式碼,您可以防止 IIS 提供指定的字元序列:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <denyUrlSequences>
     <add sequence=".."/>
    </denyUrlSequences>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

在上一個範例中, '..' 序列遭到拒絕。 假設您從出家的廠商購買應用程式,併發現當指定的字元序列傳送給應用程式時,應用程式容易遭受攻擊。 使用這項功能,只要將該 URL 序列新增至拒絕清單即可保護該應用程式,而不需要修補應用程式的程式碼。

篩選掉隱藏區段

這項功能可讓您定義哪些區段為「可服務」。當 IIS 根據這項功能拒絕要求時,記錄的錯誤碼為 404.8。 這項功能是 IIS 7 和更新版本新功能;它不是 UrlScan 的一部分。

請考慮下列範例,其中伺服器上有兩個 URL:

http://site.com/bin

http://site.com/binary

假設您想要允許二進位目錄中的內容,但不要允許 bin 目錄中的內容。 如果您使用 URL 序列並拒絕序列 「bin」,您會拒絕這兩個 URL 的存取權。 使用如下所示的組態,您可以拒絕 bin 的存取權,但仍提供二進位檔中的內容:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="BIN"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

IIS 7 和更新版本錯誤碼

在舊版中,您可以使用全域層級的 UrlScan 來定義您想要在系統上強制執行的安全性原則。 使用 IIS 7 和更新版本,您仍然可以在全域層級實作這些原則,但也可以依 URL 實作這些原則。 因此,您可以利用新豐富委派模型提供的所有優點。

下表是錯誤碼 IIS 記錄的摘要:

錯誤 狀態碼
找不到網站 404.1
原則拒絕 404.2
mime map 拒絕 404.3
沒有處理常式 404.4
要求篩選:URL 序列遭拒 404.5
要求篩選:動詞拒絕 404.6
要求篩選:副檔名遭拒 404.7
要求篩選:隱藏區段拒絕 404.8
因為已設定隱藏的檔案屬性,所以拒絕 404.9
要求篩選:拒絕,因為 URL 重複逸出 404.11
要求篩選:因為高位字元而遭到拒絕 404.12
要求篩選:因為 URL 太長而遭到拒絕 404.14
要求篩選:拒絕,因為查詢字串太長 404.15
要求篩選:拒絕,因為內容長度太大 413.1
要求篩選:拒絕,因為要求標頭太長 431