Ограничения запросов <requestLimits>

Общие сведения

Элемент <requestLimits> задает ограничения на HTTP-запросы, обрабатываемые веб-сервером. Эти ограничения включают максимальный размер запроса, максимальную длину URL-адреса и максимальную длину строки запроса. Кроме того, <requestLimits> элемент может содержать коллекцию определяемых пользователем ограничений заголовков HTTP в элементе <headerLimits> , что позволяет определять пользовательские параметры для заголовков HTTP.

Примечание

Если фильтрация запросов блокирует HTTP-запрос, так как HTTP-запрос превышает ограничения запроса, IIS 7 вернет клиенту ошибку HTTP 404 и регистрирует одно из следующих состояний HTTP с уникальным подсостояние, определяющее причину отклонения запроса:

Подсостояние HTTP Описание
404.14 Слишком длинный URL-адрес
404.15 Слишком длинная строка запроса
413.1 Слишком большая длина содержимого

Эти подсостояние позволяют веб-администраторам анализировать журналы 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 Элемент <requestLimits> не был изменен в IIS 8.0.
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. На странице Роли сервера разверните узел Веб-сервер (IIS),веб-сервер, безопасность, а затем выберите Фильтрация запросов. Щелкните Далее.
    Снимок экрана: выделенный параметр .
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узлы Службы IIS, Веб-службы, Безопасность, а затем выберите Фильтрация запросов.
    Снимок экрана: выделенная папка
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Windows Server 2008 или Windows Server 2008 R2

  1. На панели задач нажмите кнопку Пуск, выберите Администрирование, а затем диспетчер сервера.
  2. В области иерархии диспетчер сервера разверните узел Роли и выберите Веб-сервер (IIS).
  3. На панели Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.
  4. На странице Выбор служб ролеймастера добавления служб ролей выберите Фильтрация запросов и нажмите кнопку Далее.
    Снимок экрана: выделенный параметр
  5. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  6. На странице Результаты нажмите кнопку Закрыть.

Windows Vista или Windows 7

  1. На панели задач нажмите кнопку Пуск, а затем панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узел Службы IIS, затем Службы Интернета, а затем — Безопасность.
  4. Выберите Фильтрация запросов и нажмите кнопку ОК.
    Снимок экрана: выбрана и выделена папка

Инструкции

Примечание для пользователей IIS 7.0. Для некоторых действий, описанных в этом разделе, может потребоваться установить пакет администрирования Майкрософт для IIS 7.0, который включает пользовательский интерфейс для фильтрации запросов. Чтобы установить пакет администрирования Майкрософт для IIS 7.0, см. следующий URL-адрес:

Изменение параметров функции фильтрации запросов и ограничений запросов

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения перейдите к подключению, сайту, приложению или каталогу, для которого требуется изменить параметры фильтрации запросов.

  3. На панели Главная дважды щелкните Фильтрация запросов.
    Снимок экрана: домашняя панель начального веб-сайта по умолчанию.

  4. Щелкните Изменить параметры компонентов... в области Действия .
    Снимок экрана: экран фильтрации запросов с вкладкой

  5. Укажите параметры и нажмите кнопку ОК.
    Снимок экрана: диалоговое окно Например, можно внести следующие изменения:

    • Измените максимальную длину URL-адреса на 2 КБ, указав значение 2048.
    • Измените максимальную длину строки запроса на 1 КБ, указав 1024.
    • Запретить доступ к командам HTTP, не добавленным в список, снимите флажок Разрешить команды без списка проверка.

Добавление ограничений для заголовков HTTP

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения перейдите к подключению, сайту, приложению или каталогу, для которого требуется изменить параметры фильтрации запросов.

  3. На панели Главная дважды щелкните Фильтрация запросов.
    Снимок экрана: начальный экран веб-сайта по умолчанию с параметрами

  4. В области Фильтрация запросов перейдите на вкладку Заголовки , а затем нажмите кнопку Добавить заголовок... в области Действия .
    Снимок экрана: область

  5. В диалоговом окне Добавление заголовка введите заголовок HTTP и максимальный размер для ограничения заголовка, а затем нажмите кнопку ОК.
    Снимок экрана: диалоговое окно

    Например, заголовок Content-type содержит тип MIME для запроса. Если задать значение 100, длина заголовка Content-type будет ограничена 100 байтами.

Конфигурация

Атрибуты

Атрибут Описание
maxAllowedContentLength Необязательный атрибут uint.

Указывает максимальную длину содержимого в запросе в байтах.

Значение по умолчанию — 30000000, которое составляет приблизительно 28,6 МБ.
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()