Настройка фильтрации запросов в IIS
В этом документе показано, как использовать общие параметры фильтра запросов для повышения безопасности веб-сервера IIS 8.
Фильтры запросов ограничивают типы HTTP-запросов, которые обрабатывает IIS 8. Блокируя определенные HTTP-запросы, фильтры запросов помогают предотвратить потенциально опасные запросы от достижения сервера. Модуль фильтра запросов сканирует входящие запросы и отклоняет запросы, которые являются нежелательными на основе установленных правил.
По умолчанию СЛУЖБЫ IIS отклоняют запросы на просмотр критических сегментов кода. Он также отклоняет запросы для некоторых расширений имен файлов.
Вы можете настроить фильтр запросов на уровне сервера, а затем переопределить конфигурацию на уровне веб-сайта.
Необходимые компоненты
Чтобы получить большую часть из этого руководства, необходимо иметь доступ к компьютеру, на котором выполняется одна из следующих операционных систем:
- Windows Server® 2012
- Windows® 8
Общие параметры фильтра запросов
Общие параметры включают такие параметры, как показано ниже.
- Разрешение доступа к файлу с расширением, которое не указано для фильтра запросов.
- Следует ли разрешать запросы, использующие HTTP-команды, которые не перечислены.
- Следует ли разрешать запросы, содержащие высокобитовые символы (не ASCII).
- Следует ли разрешать запросы, которые кодируются в двойном кодировании.
- Максимальная длина запрошенного содержимого.
- Максимальная длина URL-адреса.
- Максимальный размер строки запроса.
Настройка общих параметров фильтрации запросов с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- В области Действия щелкните Изменить параметры компонента.
- В диалоговом окне "Изменение параметров фильтрации запросов" измените нужные параметры и нажмите кнопку "ОК".
Настройка общих параметров фильтрации запросов с помощью командной строки
Настройка высокобитовых символов
Чтобы настроить высокобитовые символы, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /allowhighbitcharacters:
true |
false
Например, чтобы разрешить высокобитовые символы, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /allowhighbitcharacters:true
Настройка двойного экранирования
Чтобы настроить двойное экранирование, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /allowdoubleescaping:
true |
false
Например, чтобы включить двойное экранирование, введите следующую команду в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /allowdoubleescaping:true
Настройка максимально допустимой длины содержимого
Чтобы настроить значение максимально допустимой длины содержимого, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:
единицу
Единица переменной requestlimits.maxallowedcontentlength:
указывает максимальную длину содержимого.
Например, чтобы указать 30000000 в качестве максимальной длины содержимого, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /requestlimits.maxallowedcontentlength:30000000
Настройка максимально допустимой длины URL-адреса
Чтобы настроить значение максимально допустимой длины входящего URL-адреса, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /requestlimits.maxurl:
единицу
Единица переменной requestlimits.maxurl:
указывает максимальную длину входящего URL-адреса.
Например, чтобы указать 4096 в качестве максимальной длины входящего URL-адреса, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /requestlimits.maxurl:4096
Настройка максимально допустимой длины строки запроса
Чтобы настроить значение максимально допустимой длины входящей строки запроса, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /requestlimits.maxquerystring:
единицу
Единица переменной requestlimits.maxquertystring:
указывает максимальную длину входящей строки запроса.
Например, чтобы указать 2048 в качестве максимальной входящей строки запроса, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /requestlimits.maxquerystring:2048
Настройка максимального размера заголовка HTTP
Чтобы настроить ограничение размера для определенного заголовка HTTP, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='
единица строки',sizelimit='
']
Строка переменной header=
указывает заголовок, к который применяется это ограничение. Единица переменной sizelimit=
указывает максимальный размер этого заголовка.
Например, чтобы указать максимальный размер 2048 для заголовков, включающих значение contoso.com, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='contoso.com',sizelimit='2048']
Расширения файлов
Для каждого добавляемого расширения имени файла можно указать, следует ли разрешать или отклонять запросы для этого типа файла.
Настройка расширений имени файла с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Перейдите на вкладку "Расширения имени файла".
- В области действий щелкните "Разрешить расширение имени файла" или "Запретить расширение имени файла".
- Введите расширение имени файла в поле и нажмите кнопку "ОК".
Настройка расширений имен файлов с помощью командной строки
Настройка расширений имен файлов без списка
Чтобы настроить, как IIS работает с расширениями без списка имен файлов, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:
true |
false
Например, чтобы запретить расширения имен файлов без списка, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /fileExtensions.allowunlisted:false
Настройка для запросов WebDAV
Чтобы настроить, применяются ли расширения имен файлов к запросам WebDAV, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:
true |
false
Например, чтобы настроить службы IIS, чтобы расширения имени файла не применялись к запросам WebDAV, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /fileExtensions.applyToWebDAV:false
Добавление или удаление расширения имени файла
Чтобы добавить расширение имени файла, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='
string',allowed='true | false']
Строка переменнойfileextension
= — это расширение имени файла, которое требуется разрешить или запретить.
Например, чтобы добавить правило разрешения для расширения имени файла .xxx, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /+fileExtensions.[fileextension='.xxx',allowed='true']
Чтобы удалить правило расширения имени файла .xxx, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /-fileExtensions.[fileextension='.xxx']
Правила фильтрации
IIS 8 позволяет определять пользовательские правила фильтрации, которые применяются к входящим запросам. С помощью этой функции можно определить фильтры, которые могут выполнять следующие действия:
- Проверьте URL-адрес запроса.
- Сканирование строк запроса, содержащихся в URL-адресе.
- Проверка определенных полей заголовка.
- Определите, к каким расширениям имени файла применяется фильтр.
- Определите строки, которые нужно запретить.
Настройка правила фильтрации с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Перейдите на вкладку "Правила ".
- В области действий дважды щелкните "Добавить правило фильтрации".
- В поле "Имя" введите имя правила фильтрации.
- Если вы хотите проверить URL-адрес, установите флажок "Url-адрес сканирования".
- Если вы хотите проверить строку запроса, установите флажок "Проверить строку запроса".
- В разделе "Заголовки сканирования" введите один или несколько заголовков для проверки.
- В разделе "Область применения" введите одно или несколько расширений имени файла, к которым применяется правило.
- В разделе "Запрещенные строки" введите одну или несколько строк, которые необходимо запретить.
- Щелкните OK.
Скрытые сегменты
Эта функция позволяет отклонять запросы, содержащие сегмент URL-адреса (например, имя папки).
Настройка скрытых сегментов с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Перейдите на вкладку "Скрытые сегменты".
- В области "Действия" нажмите кнопку "Добавить скрытый сегмент".
- Введите сегмент URL-адреса в поле и нажмите кнопку "ОК".
Настройка скрытых сегментов с помощью командной строки
Настройка для запросов WebDAV
Чтобы настроить, применяются ли скрытые сегменты к запросам WebDAV, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:
true |
false
Например, чтобы настроить СЛУЖБЫ IIS, чтобы скрытые сегменты не применялись к запросам WebDAV, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /hiddensegments.applyToWebDAV:false
Добавление скрытого сегмента
Чтобы настроить скрытый сегмент, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /+hiddensegments.[segment='
string']
Строка переменной segment=
указывает сегмент URL-адреса, скрытый.
Например, чтобы указать, что /bin является скрытым сегментом, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /+hiddensegments.[segment='/bin']
Фильтрация URL-адресов
Службы IIS можно настроить для принятия указанного URL-адреса. Кроме того, его можно настроить, чтобы запретить указанную последовательность URL-адресов.
Настройка фильтрации URL-адресов с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Выберите вкладку URL-адреса .
- В области "Действия" выберите "Разрешить URL-адрес" или "Запретить последовательность".
- Введите URL-адрес или последовательность URL-адресов в поле и нажмите кнопку "ОК".
Настройка фильтрации URL-адресов с помощью командной строки
Чтобы запретить последовательность URL-адресов, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='
string']
Строка переменной sequence=
указывает последовательность символов в URL-адресе, который IIS никогда не разрешен для синтаксического анализа.
Например, чтобы указать, что IIS никогда не анализирует URL-адреса, содержащие два периода, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /+denyurlsequences.[sequence='..']
HTTP-команды
Вы можете определить список команд, которые IIS 8 принимает в рамках запроса. Если IIS отклоняет запрос на основе этой функции, код ошибки регистрируется в журнале 404.6.
Настройка незаписанных http-команд с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Перейдите на вкладку "Команды HTTP".
- В области "Действия" щелкните "Разрешить команду" или "Запретить команду".
- Введите команду в поле и нажмите кнопку "ОК".
Настройка команд HTTP без списка с помощью командной строки
Настройка незаписанных HTTP-команд
Чтобы настроить, как IIS работает с незаписанными командами, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /verbs.allowunlisted:
true |
false
Например, чтобы запретить незаписанные команды, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /verbs.allowunlisted:false
Настройка для запросов WebDAV
Чтобы настроить, применяется ли фильтрация команд к запросам WebDAV, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /verbs.applyToWebDAV:
true |
false
Например, чтобы настроить службы IIS, чтобы фильтрация команд не применялась к запросам WebDAV, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /verbs.applyToWebDAV:false
Добавление HTTP-команды
Чтобы настроить команду для фильтрации, используйте следующий синтаксис:
appcmd set config /section:requestfiltering /+verbs.[verb='
строка',allowed='
true |
false']
Строка переменной verb=
указывает, к глаголу, к этому ограничению применяется.
Например, чтобы указать, что GET разрешено, введите следующее в командной строке и нажмите клавишу ВВОД:
appcmd set config /section:requestfiltering /+verbs.[verb='GET',allowed='true']
Ограничения размера заголовка
Можно ограничить размер заголовков HTTP-запросов, чтобы повысить производительность и безопасность. Заголовки — это пары "имя-значение", определяющие операционные параметры транзакции HTTP.
Настройка ограничений размера заголовка с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, для которого необходимо настроить фильтр запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Выберите вкладку "Заголовки" и нажмите кнопку "Добавить заголовок".
- В поле "Заголовок" введите имя поля заголовка.
- В поле "Ограничение размера" введите положительное целое число, представляющее ограничение размера заголовка в байтах.
- Щелкните OK.
Строки запроса
Можно настроить IIS 8, чтобы разрешить или запретить определенные строки запроса, содержащиеся в запрошенном URL-адресе. Например, если строка запроса отказано в URL-адресе запроса, запрос отклоняется.
Настройка строк запроса с помощью пользовательского интерфейса
- Откройте диспетчер IIS и выберите уровень, на котором необходимо настроить фильтрацию запросов.
- В представлении функций дважды щелкните фильтрацию запросов.
- Выберите вкладку "Строки запроса" и нажмите кнопку "Разрешить строку запроса" или "Запретить строку запроса".
- В поле строки запроса введите строку запроса.
- Щелкните OK.
Ведение журнала фильтра запросов
Для оценки и оптимизации конфигурации фильтра запросов можно использовать ведение журнала IIS.
В следующей таблице показаны коды ошибок фильтра запросов, которые отображаются в журнале:
Описание ошибки | Код состояния |
---|---|
Фильтрация запросов: последовательность URL-адресов запрещена | 404.5 |
Фильтрация запросов: отказано в команде | 404.6 |
Фильтрация запросов: расширение имени файла запрещено | 404.7 |
Фильтрация запросов: запрещено скрытым сегментом | 404.8 |
Фильтрация запросов: отклонено, так как URL-адрес двойной экранирования | 404.11 |
Фильтрация запросов: отклонено из-за больших битовых символов | 404.12 |
Фильтрация запросов: отклонено, так как URL-адрес слишком длинный | 404.14 |
Фильтрация запросов: отклонено, так как строка запроса слишком длинна | 404.15 |
Фильтрация запросов: отклонено, так как слишком большая длина содержимого | 413.1 |
Фильтрация запросов: отклонено, так как заголовок запроса слишком длинный. | 4,31 |