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

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

IIS 7.0 и выше включает модуль фильтрации запросов, основанный на фильтре ISAPI URLScan для IIS 6.0. Модуль помогает ужесточить безопасность веб-серверов.

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

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

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

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

Схема процесса обработки, начиная с HTTP-запроса и заканчивая HTTP-ответом.

Модуль фильтрации запросов выполняется в начале конвейера обработки запросов, обрабатывая событие 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-путь Да, использование поиска подстроки Да, использование шаблонов regex и подстановочных знаков
Проверка длины URL-адреса Да Нет
Строка запроса сканирования Нет Да, использование шаблонов regex и подстановочных знаков
Проверка длины строки запроса Да Нет
Проверка http-команд Да Да
Проверка длины содержимого запроса Да Нет
Сканирование заголовков HTTP Нет Да, использование шаблонов regex и подстановочных знаков
Проверка длины заголовков HTTP Да Нет
Сканирование переменных сервера Нет Да
Проверка IP-адреса отправителя или имени узла Нет* Да

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

Действия по блокировке запросов

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

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

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

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

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

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

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

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