Поделиться через


Фильтрация запросов и перезапись URL-адресов IIS 7.0

Руслан Якушев

СЛУЖБЫ IIS 7.0 и более поздних версий содержат модуль фильтрации запросов, основанный на фильтре ISAPI URLScan для IIS 6.0. Модуль помогает повысить безопасность веб-серверов.

Команда IIS также выпустила модуль перезаписи ДОПОЛНИТЕЛЬНЫХ URL-адресов для IIS, который предоставляет функциональные возможности для обработки URL-адресов на основе правил. Несмотря на то, что основной целью модуля переопределения URL-адресов является перезапись путей URL-адресов для запросов, модуль переопределения также можно использовать в качестве средства обеспечения безопасности, которое помогает предотвратить доступ к содержимому веб-сайта.

В этой статье описываются различия между этими двумя модулями и приводятся рекомендации по выбору более безопасного веб-сервера.

Фильтрация запросов и перезапись URL-адресов в конвейере обработки запросов IIS

Прежде всего, важно понять, как модуль фильтрации запросов и модуль перезаписи подключаются к конвейеру IIS. На следующей схеме показан относительный порядок этих двух модулей:

Схема рабочего процесса для получения из запроса H T T P и ответа H T T P.

Модуль фильтрации запросов выполняется в начале конвейера обработки запросов путем обработки события BeginRequest. Модуль оценивает метаданные запроса, такие как заголовки, строка запроса, длина содержимого и т. д., чтобы определить, соответствуют ли метаданные запроса любому существующему фильтру. При наличии совпадения модуль создает ответ 404 (файл не найден), а затем создает ярлыки для остальной части конвейера IIS.

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

Обратите внимание, что модуль фильтрации запросов помещается перед модулем переопределения URL-адресов. Это связано с тем, что в архитектуре IIS модуль фильтрации запросов считается компонентом привратника, который защищает веб-сервер от вредоносных запросов. Модуль переопределения URL-адресов считается серверным компонентом обработки URL-адресов, который работает с URL-адресами, которые уже были отфильтрованы модулем фильтрации запросов. Перезапись URL-адресов можно рассматривать как логику серверного приложения, аналогичную ASP.NET приложениям, которые также могут выполнять перезапись или перенаправление. Фильтрация запросов — это первая линия защиты, в то время как средство перезаписи URL-адресов может быть вторым барьером безопасности, более характерным для приложения. Дополнительные сведения см. в записи блога "Взаимодействие между модулями переопределения URL-адресов и фильтрации запросов для IIS7" на веб-сайте IIS.

Различия между фильтрацией запросов и переопределением URL-адресов

Концептуальные различия между фильтрацией запросов и перезаписью URL-адресов:

  • Фильтрация запросов разработана и оптимизирована исключительно для сценариев безопасности.
  • Перезапись URL-адресов может применяться в широком наборе сценариев; Сценарии безопасности — это лишь подмножество из них.

Учитывая это, вы можете сравнить функции каждого модуля, которые можно использовать для сценариев безопасности. Следует учитывать следующие категории:

  1. Критерии фильтрации. Какие входные данные можно использовать для принятия решения о блокировке запроса? Кроме того, какие условия можно использовать для выражения логики блокировки запросов?
  2. Действия, блокирующие запросы. Какие действия можно выполнить, если запрос удовлетворяет критериям фильтрации?
  3. Влияние на производительность. Как фильтрация запросов и перезапись URL-адресов могут повлиять на производительность веб-сервера?

Критерии фильтрации

В следующей таблице перечислены возможные критерии фильтрации и объясняется, как их поддерживает каждый модуль.

Критерий Поддерживается модулем фильтрации запросов? Поддерживается модулем перезаписи URL-адресов?
Сканировать запрошенный URL-путь Да, с помощью поиска подстроки Да, использование регулярных выражений и шаблонов с подстановочными знаками
Проверка длины URL-адреса Да Нет
Сканировать строку запроса Нет Да, использование регулярных выражений и шаблонов с подстановочными знаками
Проверка длины строки запроса Да Нет
Проверка HTTP-команд Да Да
Проверка длины содержимого запроса Да Нет
Сканирование заголовков HTTP Нет Да, использование регулярных выражений и шаблонов с подстановочными знаками
Проверка длины заголовков HTTP Да Нет
Проверка переменных сервера Нет Да
Проверка IP-адреса или имени узла отправителя Нет* Да

* Модуль ограничения IP-адресов в IIS можно использовать для блокировки запросов с определенных IP-адресов и имен узлов.

Действия Request-Blocking

Модуль фильтрации запросов имеет только одно действие, которое он выполняет, когда запрос соответствует критерию фильтрации. Действие состоит в том, чтобы вернуть код состояния 404 (Файл не найден).

Модуль перезаписи URL-адресов предоставляет гораздо более широкий набор параметров, если запрос должен быть заблокирован, включая следующее:

  1. Запрошенный URL-адрес можно переписать на другой URL-адрес. Например, чтобы предотвратить горячую компоновку изображений, можно переписать URL-адрес в файл изображения заполнителя для любых запросов, поступающих от стороннего домена.
  2. Веб-клиент можно перенаправить на другой URL-адрес.
  3. В веб-клиент можно отправить код состояния HTTP по вашему выбору. Например, вы можете отправить ответ с состоянием 401 (Не авторизовано) для запросов, соответствующих определенным условиям фильтрации.
  4. HTTP-запрос можно прервать, удалив подключение сокета. Таким образом, веб-клиент вообще не получает сведений о веб-сервере.

Влияние на производительность

Оба модуля реализованы, чтобы как можно меньше влиять на производительность веб-сервера IIS. Однако между этими модулями существуют следующие важные различия в производительности.

  • Модуль перезаписи URL-адресов в значительной степени зависит от шаблонов регулярных выражений. Оценка регулярных выражений является дорогостоящей операцией, и если вы определите много сложных правил перезаписи, вы можете увидеть заметное влияние на пропускную способность веб-сервера.
  • Модуль фильтрации запросов не использует регулярные выражения или другие сопоставления шаблонов. Он просто выполняет поиск подстроки, что может оказать значительно меньшее влияние на пропускную способность веб-сервера.

Выбор между фильтрацией запросов и переопределением URL-адресов

Если вы выбираете между фильтрацией запросов и переопределением URL-адресов для ужесточения безопасности веб-сервера, общее правило заключается в том, чтобы начать с фильтрации запросов. Фильтрация запросов оптимизирована для сценариев безопасности, и ее набор функций, скорее всего, будет достаточным для реализации требований к безопасности. Если у вас есть требование, которое не может быть выполнено модулем фильтрации запросов, используйте модуль переопределения URL-адресов для реализации этого требования и оставьте остальные задачи безопасности в модуле фильтрации запросов. Таким образом, модуль перезаписи URL-адресов влияет на производительность, используя минимальный объем правил перезаписи для обработки сервером.