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


Запрет последовательностей URL-адресов <denyUrlSequences>

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

Элемент <denyUrlSequences> содержит коллекцию <add> элементов, указывающих последовательности символов URL-адреса, которые будут запрещены службами IIS, что помогает предотвратить атаки на основе URL-адресов на веб-сервере.

Например, использование двух точек в URL-адресе ("..") позволит серверу обработать URL-адрес в следующем более высоком каталоге, но это также может указывать на то, что злоумышленник пытается получить доступ к областям за пределами области содержимого. Блокировка этого шаблона символов устранит вероятность того, что злоумышленник сможет воспользоваться этой последовательностью URL-адресов.

Примечание

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

Подсостояние HTTP Описание
404.5 Последовательность URL-адресов запрещена

Это подсостояние позволяет веб-администраторам анализировать журналы IIS и выявлять потенциальные угрозы.

Примечание

Начиная с IIS 7.5, вы можете переопределить последовательности URL-адресов в <denyUrlSequences> коллекции, добавив последовательности URL-адресов в коллекцию <alwaysAllowedUrls> .

Совместимость

Версия Примечания
IIS 10.0 Элемент <denyUrlSequences> не был изменен в IIS 10.0.
IIS 8,5 Элемент <denyUrlSequences> не был изменен в IIS 8.5.
IIS 8,0 Элемент <denyUrlSequences> не был изменен в IIS 8.0.
IIS 7,5 Элемент <denyUrlSequences> не был изменен в IIS 7.5.

Примечание: IIS 7.5 позволяет переопределить последовательности URL-адресов в элементе <denyUrlSequences> , добавляя последовательности URL-адресов в коллекцию <alwaysAllowedUrls> .
IIS 7.0 Элемент <denyUrlSequences> коллекции появился <requestFiltering> в IIS 7.0.
IIS 6,0 Элемент <denyUrlSequences> заменяет функции URLScan в IIS 6.0 [DenyUrlSequences] .

Настройка

Установка 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, Службы Интернета, Безопасность, а затем выберите Фильтрация запросов.
    Снимок экрана: диалоговое окно компонентов Windows 8 или 8.1. Выделена фильтрация запросов.
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Windows Server 2008 или Windows Server 2008 R2

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

Windows Vista или Windows 7

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

Инструкции

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

Как запретить последовательность 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. В области Главная дважды щелкните Фильтрация запросов.
    Снимок экрана: окно диспетчера I IS. Выделен значок фильтрации запросов.

  4. В области Фильтрация запросов перейдите на вкладку Запретить последовательности URL-адресов и нажмите кнопку Добавить последовательность URL-адресов... в области Действия .
    Снимок экрана: окно диспетчера I I IS с фильтрацией запросов в области main.

  5. В диалоговом окне Добавление запрещенной последовательности введите последовательность URL-адресов, которую необходимо заблокировать, и нажмите кнопку ОК.
    Снимок экрана: диалоговое окно
    Например, чтобы предотвратить трансверсию каталогов на сервере, в диалоговом окне необходимо ввести две точки ("..").

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

Элемент <denyUrlSequences><requestFiltering> элемента настраивается на уровне сайта, приложения или каталога.

Атрибуты

Отсутствует.

Дочерние элементы

Элемент Описание
add Необязательный элемент.

Добавляет последовательность в коллекцию запрещенных последовательностей URL-адресов.
clear Необязательный элемент.

Удаляет все ссылки на последовательности из <denyUrlSequences> коллекции.
remove Необязательный элемент.

Удаляет ссылку на последовательность из <denyUrlSequences> коллекции.

Образец конфигурации

В следующем примере файл Web.config запретит доступ к трем последовательности URL-адресов. Первая последовательность предотвращает передачу каталогов, вторая — доступ к альтернативным потокам данных, а третья — использование обратных косых черт в URL-адресах.

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <denyUrlSequences>
               <add sequence=".." />
               <add sequence=":" />
               <add sequence="\" />
            </denyUrlSequences>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

В следующем примере показано сочетание <denyUrlSequences> элемента и <alwaysAllowedUrls> элемента, который будет запрещать любые URL-адреса, если они содержат одну из двух определенных последовательностей символов, но всегда разрешает определенный URL-адрес, содержащий обе эти две определенные последовательности символов в определенном порядке.

<system.webServer>
   <security>
      <requestFiltering>
         <denyUrlSequences>
            <add sequence="bad" />
            <add sequence="sequence" />
         </denyUrlSequences>
         <alwaysAllowedUrls>
            <add url="/bad_sequence.txt" />
         </alwaysAllowedUrls>
      </requestFiltering>
   </security>
</system.webServer>

Пример кода

В следующих примерах кода показано, как запретить доступ к трем последовательности URL-адресов для веб-сайта по умолчанию: трансверсии каталогов ("..), альтернативным потокам данных (":") и обратным косой чертам ("").

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence='..']" 

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence=':']" 

appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"denyUrlSequences.[sequence='\']"

PowerShell

Start-IISCommitDelay

$denyUrlSequences = Get-IISConfigSection -CommitPath 'Default Web Site' -SectionPath 'system.webServer/security/requestFiltering' | Get-IISConfigCollection -CollectionName 'denyUrlSequences'

New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = '..' }
New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = ':' }
New-IISConfigCollectionElement -ConfigCollection $denyUrlSequences -ConfigAttribute @{ 'sequence' = '\' }

Stop-IISCommitDelay

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");

         ConfigurationElementCollection denyUrlSequencesCollection = requestFilteringSection.GetCollection("denyUrlSequences");

         ConfigurationElement addElement = denyUrlSequencesCollection.CreateElement("add");
         addElement["sequence"] = @"..";
         denyUrlSequencesCollection.Add(addElement);

         ConfigurationElement addElement1 = denyUrlSequencesCollection.CreateElement("add");
         addElement1["sequence"] = @":";
         denyUrlSequencesCollection.Add(addElement1);

         ConfigurationElement addElement2 = denyUrlSequencesCollection.CreateElement("add");
         addElement2["sequence"] = @"\";
         denyUrlSequencesCollection.Add(addElement2);

         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 denyUrlSequencesCollection As ConfigurationElementCollection = requestFilteringSection.GetCollection("denyUrlSequences")

      Dim addElement As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement("sequence") = ".."
      denyUrlSequencesCollection.Add(addElement)

      Dim addElement1 As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement1("sequence") = ":"
      denyUrlSequencesCollection.Add(addElement1)

      Dim addElement2 As ConfigurationElement = denyUrlSequencesCollection.CreateElement("add")
      addElement2("sequence") = "\"
      denyUrlSequencesCollection.Add(addElement2)

      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 denyUrlSequencesCollection = requestFilteringSection.ChildElements.Item("denyUrlSequences").Collection;

var addElement = denyUrlSequencesCollection.CreateNewElement("add");
addElement.Properties.Item("sequence").Value = "..";
denyUrlSequencesCollection.AddElement(addElement);

var addElement1 = denyUrlSequencesCollection.CreateNewElement("add");
addElement1.Properties.Item("sequence").Value = ":";
denyUrlSequencesCollection.AddElement(addElement1);

var addElement2 = denyUrlSequencesCollection.CreateNewElement("add");
addElement2.Properties.Item("sequence").Value = "\\";
denyUrlSequencesCollection.AddElement(addElement2);

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 denyUrlSequencesCollection = requestFilteringSection.ChildElements.Item("denyUrlSequences").Collection

Set addElement = denyUrlSequencesCollection.CreateNewElement("add")
addElement.Properties.Item("sequence").Value = ".."
denyUrlSequencesCollection.AddElement(addElement)

Set addElement1 = denyUrlSequencesCollection.CreateNewElement("add")
addElement1.Properties.Item("sequence").Value = ":"
denyUrlSequencesCollection.AddElement(addElement1)

Set addElement2 = denyUrlSequencesCollection.CreateNewElement("add")
addElement2.Properties.Item("sequence").Value = "\"
denyUrlSequencesCollection.AddElement(addElement2)

adminManager.CommitChanges()