要求限制要求Limits <>

概觀

元素 <requestLimits> 會指定 Web 服務器所處理之 HTTP 要求的限制。 這些限制包括要求的大小上限、URL 長度上限,以及查詢字串的最大長度。 此外, <requestLimits> 元素可以包含 元素中 <headerLimits> 使用者定義的 HTTP 標頭限制集合,這可讓您在 HTTP 標頭上定義自訂設定。

注意

當要求篩選因為 HTTP 要求超過要求限制而封鎖 HTTP 要求時,IIS 7 會將 HTTP 404 錯誤傳回給用戶端,並使用唯一的子狀態來記錄下列其中一個 HTTP 狀態,以識別要求遭到拒絕的原因:

HTTP 子狀態 描述
404.14 URL 太長
404.15 查詢字串太長
413.1 內容長度太大

這些子狀態可讓 Web 系統管理員分析其 IIS 記錄,並識別潛在的威脅。

此外,當 HTTP 要求超過 元素中所 <headerLimits> 定義的 標頭限制時,IIS 7 會將 HTTP 404 錯誤傳回給具有下列子狀態的用戶端:

HTTP 子狀態 描述
431 要求標頭太長

相容性

版本 備註
IIS 10.0 <requestLimits> IIS 10.0 中未修改專案。
IIS 8.5 <requestLimits> 在 IIS 8.5 中修改專案。
IIS 8.0 在 IIS 8.0 中未修改專案 <requestLimits>
IIS 7.5 <requestLimits> 在 IIS 7.5 中修改專案。
IIS 7.0 <requestLimits>集合的 <requestFiltering> 元素是在 IIS 7.0 中引進的。
IIS 6.0 元素 <requestLimits> 會取代 IIS 6.0 UrlScan [RequestLimits] 功能。

安裝程式

IIS 7 和更新版本的預設安裝包含要求篩選角色服務或功能。 如果卸載要求篩選角色服務或功能,您可以使用下列步驟重新安裝它。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在工作列上,按一下 [伺服器管理員]
  2. 伺服器管理員中,按一下 [管理]功能表,然後按一下 [新增角色和功能]。
  3. 在 [ 新增角色和功能 精靈] 中,按 [下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [ 下一步]。
  4. 在 [ 伺服器角色] 頁面上,依序展開 [Web 服務器] ([IIS) ]、[ 網頁伺服器]、[ 安全性],然後選取 [ 要求篩選]。 按一下 [下一步] 。
    醒目提示 [要求篩選] 選項的 螢幕擷取畫面。.
  5. 在 [選取功能] 頁面上,按 [下一步]
  6. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  7. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或Windows 8.1

  1. 在 [開始] 畫面上,將指標全部移至左下角,以滑鼠右鍵按一下 [開始] 按鈕,然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。
  3. 展開 [網際網路資訊服務]、[ 萬維網服務]、[ 安全性],然後選取 [ 要求篩選]。
    醒目提示 [要求篩選] 資料夾的螢幕擷取畫面。
  4. 按一下 [確定]。
  5. 按一下 [關閉] 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在工作列上,按一下 [開始],指向 [系統管理工具],然後按一下[伺服器管理員]。
  2. [伺服器管理員階層] 窗格中,展開 [角色],然後按一下 [Web 服務器] (IIS)
  3. [Web 服務器 (IIS) ] 窗格中,捲動至 [ 角色服務 ] 區段,然後按一下 [ 新增角色服務]。
  4. 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,選取 [要求篩選],然後按 [下一步]。
    醒目提示 [要求篩選] 選項的螢幕擷取畫面,以及唯一選取的選項。
  5. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  6. 在 [結果] 頁面上,按一下 [關閉]

Windows Vista 或 Windows 7

  1. 在工作列上,按一下 [開始],然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。
  3. 展開 [Internet Information Services],然後展開 [萬維網服務],然後展開 [安全性]。
  4. 選取 [要求篩選],然後按一下 [ 確定]。
    選取並醒目提示 [要求篩選] 資料夾的螢幕擷取畫面。

作法

IIS 7.0 使用者的注意事項:本節中的某些步驟可能需要您安裝適用于 IIS 7.0 的 Microsoft 系統管理元件,其中包含要求篩選的使用者介面。 若要安裝適用于 IIS 7.0 的 Microsoft 系統管理元件,請參閱下列 URL:

如何編輯要求篩選功能設定和要求限制

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,移至您要修改要求篩選設定的連線、月臺、應用程式或目錄。

  3. 在 [ 首頁] 窗格中,按兩下 [ 要求篩選]。
    [預設網站首頁] 畫面 [首頁] 窗格的螢幕擷取畫面。

  4. 按一下 [動作] 窗格中的[編輯功能設定...]。
    [要求篩選] 畫面的螢幕擷取畫面,其中顯示 [副檔名] 和 [隱藏區段] 索引標籤。

  5. 指定您的選項,然後按一下 [ 確定]。
    [編輯要求篩選設定] 對話方塊的螢幕擷取畫面,其中顯示四個可選取的欄位。 例如,您可以進行下列變更:

    • 藉由指定 2048,將 URL 長度上限變更為 2KB。
    • 藉由指定 1024,將查詢字串長度上限變更為 1KB。
    • 清除 [ 允許未列出的動詞 ] 核取方塊,以拒絕存取未列出的 HTTP 動詞。

如何新增 HTTP 標頭的限制

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager
  2. 在 [ 連線] 窗格中,移至您要修改要求篩選設定的連線、月臺、應用程式或目錄。

  3. 在 [ 首頁] 窗格中,按兩下 [ 要求篩選]。
    預設網站首頁畫面的螢幕擷取畫面,其中顯示 [失敗的要求追蹤規則]、[處理常式對應] 和 [H T T P 重新導向] 選項。

  4. 在 [要求篩選] 窗格中,按一下 [標頭]索引標籤,然後按一下 [動作] 窗格中的 [新增標頭...]。
    [要求篩選] 窗格的螢幕擷取畫面,其中顯示 [H T T P 動詞和標頭] 索引標籤。

  5. 在 [ 新增標頭 ] 對話方塊中,輸入 HTTP 標頭和您想要用於標頭限制的大小上限,然後按一下 [ 確定]。
    [新增標頭] 對話方塊的螢幕擷取畫面,其中顯示 [標頭] 和 [大小限制] 欄位。

    例如,「Content-type」 標頭包含要求的 MIME 類型。 指定 100 的值會將 「Content-type」 標頭的長度限制為 100 個位元組。

組態

屬性

屬性 描述
maxAllowedContentLength 選擇性 uint 屬性。

指定要求中內容的最大長度,以位元組為單位。

預設值為 30000000 ,大約是 28.6MB。
maxQueryString 選擇性 uint 屬性。

指定查詢字串的最大長度,以位元組為單位。

預設值是 2048
maxUrl 選擇性 uint 屬性。

指定 URL 的最大長度,以位元組為單位。

預設值是 4096

子元素

元素 描述
headerlimits 選擇性項目。

指定 HTML 標頭的大小限制。

組態範例

下列範例Web.config檔案會將 IIS 設定為拒絕 HTTP 要求的存取,其中 「Content-type」 標頭的長度大於 100 個位元組。

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <requestLimits>
               <headerLimits>
                  <add header="Content-type" sizeLimit="100" />
               </headerLimits>
            </requestLimits>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

範例程式碼

下列程式碼範例會將 IIS 設定為拒絕 HTTP 要求的存取,其中「Content-type」 標頭的長度大於 100 個位元組。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"requestLimits.headerLimits.[header='Content-type',sizeLimit='100']"

PowerShell

$requestLimits = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigElement -ChildElementName 'requestLimits'
$headerLimits = Get-IISConfigCollection -ConfigElement $requestLimits -CollectionName 'headerLimits'
New-IISConfigCollectionElement -ConfigCollection $headerLimits -ConfigAttribute @{ 'header'='Content-Type'; 'sizeLimit'=100 }

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");
         ConfigurationElement requestLimitsElement = requestFilteringSection.GetChildElement("requestLimits");
         ConfigurationElementCollection headerLimitsCollection = requestLimitsElement.GetCollection("headerLimits");

         ConfigurationElement addElement = headerLimitsCollection.CreateElement("add");
         addElement["header"] = @"Content-type";
         addElement["sizeLimit"] = 100;
         headerLimitsCollection.Add(addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim requestFilteringSection As ConfigurationSection = config.GetSection("system.webServer/security/requestFiltering")
      Dim requestLimitsElement As ConfigurationElement = requestFilteringSection.GetChildElement("requestLimits")
      Dim headerLimitsCollection As ConfigurationElementCollection = requestLimitsElement.GetCollection("headerLimits")

      Dim addElement As ConfigurationElement = headerLimitsCollection.CreateElement("add")
      addElement("header") = "Content-type"
      addElement("sizeLimit") = 100
      headerLimitsCollection.Add(addElement)

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";
var requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");

var requestLimitsElement = requestFilteringSection.ChildElements.Item("requestLimits");
var headerLimitsCollection = requestLimitsElement.ChildElements.Item("headerLimits").Collection;

var addElement = headerLimitsCollection.CreateNewElement("add");
addElement.Properties.Item("header").Value = "Content-type";
addElement.Properties.Item("sizeLimit").Value = 100;
headerLimitsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"
Set requestFilteringSection = adminManager.GetAdminSection("system.webServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set requestLimitsElement = requestFilteringSection.ChildElements.Item("requestLimits")
Set headerLimitsCollection = requestLimitsElement.ChildElements.Item("headerLimits").Collection

Set addElement = headerLimitsCollection.CreateNewElement("add")
addElement.Properties.Item("header").Value = "Content-type"
addElement.Properties.Item("sizeLimit").Value = 100
headerLimitsCollection.AddElement(addElement)

adminManager.CommitChanges()