Ограничения <ISAPI/CGI isapiCgiRestriction>

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

Элемент <isapiCgiRestriction><элемента безопасности> позволяет указать список приложений CGI и ISAPI, которые могут выполняться в службах IIS 7. Этот элемент позволяет гарантировать, что злоумышленники не смогут скопировать несанкционированные двоичные файлы CGI и ISAPI на веб-сервер, а затем запустить их.

Этот элемент необходимо использовать для настройки веб-сервера, только если сайт или приложение использует пул приложений, работающий в классическом режиме. Ограничения, настроенные в элементе , <isapiCgiRestriction> применяются только к коду ISAPI и CGI.

Элемент <isapiCgiRestriction> содержит коллекцию <add> элементов. Каждый <add> элемент определяет отдельный двоичный файл, который не может выполняться на сервере IIS 7 в классическом режиме.

Например, если вы создали приложение ASP.NET 2.0 и настроили приложение для использования пула приложений, работающего в классическом режиме, все запросы к приложению ASP.NET должны проходить через aspnet_isapi.dll для обработки. Чтобы убедиться, что IIS обрабатывает запросы ASP.NET, IIS заполняет <isapiCgiRestriction> элемент элементом <add> , содержащим атрибут allowed со значением true.

Если вы изменили атрибут allowed на false и оставили пул приложений в классическом режиме, ASP.NET запросы завершатся ошибкой. Однако если вы изменили пул приложений на интегрированный режим, СЛУЖБЫ IIS обрабатывают запросы ASP.NET с помощью интегрированного конвейера запросов, который обходит настроенные ограничения ISAPI и CGI.

Элемент <isapiCgiRestriction> работает совместно с элементом <applicationDependencies> , чтобы определить, какие приложения имеют зависимости от одного или нескольких ограничений расширения CGI или ISAPI.

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

Версия Примечания
IIS 10.0 Элемент <isapiCgiRestriction> не был изменен в IIS 10.0.
IIS 8,5 Элемент <isapiCgiRestriction> не был изменен в IIS 8.5.
IIS 8,0 Элемент <isapiCgiRestriction> не был изменен в IIS 8.0.
IIS 7,5 Элемент <isapiCgiRestriction> не был изменен в IIS 7.5.
IIS 7.0 Элемент <isapiCgiRestriction> появился в IIS 7.0.
IIS 6,0 Коллекция <isapiCgiRestriction> заменяет свойство WebSvcExtRestrictionList объекта метабазы IIsWebService IIS 6.0.

Настройка

Коллекция <isapiCgiRestriction> доступна только после установки модулей расширений CGI или ISAPI на сервере IIS 7 и более поздних версий. Вы не можете установить его независимо от этих компонентов.

Windows Server 2012 или Windows Server 2012 R2

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

Windows 8 или Windows 8.1

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

Windows Server 2008 или Windows Server 2008 R2

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

Windows Vista или Windows 7

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

Инструкции

Добавление ограничения ISAPI или CGI

  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. На панели Главная дважды щелкните ограничения ISAPI и CGI.
    Снимок экрана: окно диспетчера I IS с домашней страницей сервера. Выделен значок для ограничений I S P I и C G I.

  4. В области Действия нажмите кнопку Добавить...

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

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

Коллекцию <isapiCgiRestriction> можно настроить только на уровне сервера в файле ApplicationHost.config.

Атрибуты

Атрибут Описание
notListedIsapisAllowed Дополнительный логический атрибут.

Указывает, разрешено ли запускать на этом сервере модули ISAPI, не указанные в списке.

Значение по умолчанию — false.
notListedCgisAllowed Дополнительный логический атрибут.

Указывает, разрешено ли запускать на этом сервере программы CGI, не хвастаемые в списке.

Значение по умолчанию — false.

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

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

Добавляет ограничение в коллекцию ограничений ISAPI и CGI.
remove Необязательный элемент.

Удаляет ссылку на ограничение из коллекции isapiCgiRestriction.
clear Необязательный элемент.

Удаляет все ссылки на ограничения из коллекции isapiCgiRestriction.

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

Следующий пример конфигурации представляет собой конфигурацию <isapiCgiRestriction> элемента для IIS 7.0 после установки ASP и ASP.NET версии 2.0.

<security>
   <isapiCgiRestriction>
      <add allowed="true" groupId="ASP"
         path="%windir%\system32\inetsrv\asp.dll"
         description="Active Server Pages" />
      <add allowed="true" groupId="ASP.NET v2.0.50727"
         path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"
         description="ASP.NET v2.0.50727" />
   </isapiCgiRestriction>
</security>

Пример кода

В следующих примерах добавляется ограничение ISAPI/CGI для пользовательского расширения ISAPI, которое находится в папке содержимого веб-сайта, расположенного в папке C:\Inetpub\www.contoso.com\wwwroot. В примерах указывается имя, путь и группа расширения ISAPI и включается расширение.

AppCmd.exe

appcmd.exe set config -section:system.webServer/security/isapiCgiRestriction /+"[path='C:\Inetpub\www.contoso.com\wwwroot\isapi\custom.dll',allowed='True',groupId='ContosoGroup',description='Contoso Extension']" /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

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.GetApplicationHostConfiguration();
         ConfigurationSection isapiCgiRestrictionSection = config.GetSection("system.webServer/security/isapiCgiRestriction");
         ConfigurationElementCollection isapiCgiRestrictionCollection = isapiCgiRestrictionSection.GetCollection();

         ConfigurationElement addElement = isapiCgiRestrictionCollection.CreateElement("add");
         addElement["path"] = @"C:\Inetpub\www.contoso.com\wwwroot\isapi\custom.dll";
         addElement["allowed"] = true;
         addElement["groupId"] = @"ContosoGroup";
         addElement["description"] = @"Contoso Extension";
         isapiCgiRestrictionCollection.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.GetApplicationHostConfiguration
      Dim isapiCgiRestrictionSection As ConfigurationSection = config.GetSection("system.webServer/security/isapiCgiRestriction")
      Dim isapiCgiRestrictionCollection As ConfigurationElementCollection = isapiCgiRestrictionSection.GetCollection

      Dim addElement As ConfigurationElement = isapiCgiRestrictionCollection.CreateElement("add")
      addElement("path") = "C:\Inetpub\www.contoso.com\wwwroot\isapi\custom.dll"
      addElement("allowed") = True
      addElement("groupId") = "ContosoGroup"
      addElement("description") = "Contoso Extension"
      isapiCgiRestrictionCollection.Add(addElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var isapiCgiRestrictionSection = adminManager.GetAdminSection("system.webServer/security/isapiCgiRestriction", "MACHINE/WEBROOT/APPHOST");
var isapiCgiRestrictionCollection = isapiCgiRestrictionSection.Collection;

var addElement = isapiCgiRestrictionCollection.CreateNewElement("add");
addElement.Properties.Item("path").Value = "C:\\Inetpub\\www.contoso.com\\wwwroot\\isapi\\custom.dll";
addElement.Properties.Item("allowed").Value = true;
addElement.Properties.Item("groupId").Value = "ContosoGroup";
addElement.Properties.Item("description").Value = "Contoso Extension";
isapiCgiRestrictionCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set isapiCgiRestrictionSection = adminManager.GetAdminSection("system.webServer/security/isapiCgiRestriction", "MACHINE/WEBROOT/APPHOST")
Set isapiCgiRestrictionCollection = isapiCgiRestrictionSection.Collection

Set addElement = isapiCgiRestrictionCollection.CreateNewElement("add")
addElement.Properties.Item("path").Value = "C:\Inetpub\www.contoso.com\wwwroot\isapi\custom.dll"
addElement.Properties.Item("allowed").Value = True
addElement.Properties.Item("groupId").Value = "ContosoGroup"
addElement.Properties.Item("description").Value = "Contoso Extension"
isapiCgiRestrictionCollection.AddElement(addElement)

adminManager.CommitChanges()