Удаление неиспользуемых обработчиков HTTP для повышения производительности и безопасности

Где я могу получить список того, что делают все стандартные обработчики IIS HTTP? Мне нужна документация!! Я прочитал несколько блогов, которые рекомендуют удалить десятки неиспользуемых обработчиков HTTP из соображений производительности и безопасности.

Например, рекомендуется удалить TraceHandler-Integrated и TraceHandler-Integrated-4.0, потому что в противном случае переход к /trace.axd вызывает внутреннюю ошибку сервера 500 вместо 404 Not Found, и в производственной среде трассировки не должно быть.

Некоторые из обработчиков HTTP, которые проект GitHub (сейчас удален) рекомендует удалить с вашего сайта:

<system.webServer>
  <handlers>
    <remove name="TraceHandler-Integrated-4.0" />
    <remove name="TraceHandler-Integrated" />
    <remove name="AssemblyResourceLoader-Integrated-4.0" />
    <remove name="AssemblyResourceLoader-Integrated" />
    <remove name="WebAdminHandler-Integrated-4.0" />
    <remove name="WebAdminHandler-Integrated" />
    <remove name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" />
    <remove name="svc-ISAPI-4.0_32bit" />
    <remove name="ScriptHandlerFactoryAppServices-Integrated-4.0" />
    <remove name="ScriptResourceIntegrated-4.0" />
    <remove name="svc-ISAPI-4.0_64bit" />
    <remove name="svc-Integrated-4.0" />
    <remove name="vbhtm-ISAPI-4.0_32bit" />
    <remove name="vbhtm-ISAPI-4.0_64bit" />
    <remove name="vbhtm-Integrated-4.0" />
    <remove name="vbhtml-ISAPI-4.0_32bit" />
    <remove name="vbhtml-ISAPI-4.0_64bit" />
    <remove name="vbhtml-Integrated-4.0" />
    <remove name="xamlx-ISAPI-4.0_32bit" />
    <remove name="xamlx-ISAPI-4.0_64bit" />
    <remove name="xamlx-Integrated-4.0" />
    <remove name="xoml-ISAPI-4.0_32bit" />
    <remove name="xoml-ISAPI-4.0_64bit" />
    <remove name="xoml-Integrated-4.0" />
    <remove name="HttpRemotingHandlerFactory-rem-Integrated-4.0" />
    <remove name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" />
    <remove name="rules-ISAPI-4.0_32bit" />
    <remove name="rules-Integrated-4.0" />
    <remove name="HttpRemotingHandlerFactory-soap-Integrated" />
    <remove name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" />
    <remove name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" />
    <remove name="HttpRemotingHandlerFactory-soap-Integrated-4.0" />
    <remove name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" />
    <remove name="rules-ISAPI-4.0_64bit" />
    <remove name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" />
    <remove name="HttpRemotingHandlerFactory-rem-Integrated" />
    <remove name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" />
    <remove name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" />
    <remove name="AXD-ISAPI-2.0-64" />
    <remove name="cshtml-ISAPI-4.0_64bit" />
    <remove name="cshtml-Integrated-4.0" />
    <remove name="cshtm-Integrated-4.0" />
    <remove name="cshtml-ISAPI-4.0_32bit" />
    <remove name="cshtm-ISAPI-4.0_64bit" />
    <remove name="cshtm-ISAPI-4.0_32bit" />
    <remove name="AXD-ISAPI-4.0_64bit" />
    <remove name="AXD-ISAPI-2.0" />
    <remove name="AXD-ISAPI-4.0_32bit" />
    <remove name="PageHandlerFactory-ISAPI-2.0-64" />
    <remove name="PageHandlerFactory-ISAPI-2.0" />
    <remove name="PageHandlerFactory-ISAPI-4.0_64bit" />
    <remove name="PageHandlerFactory-ISAPI-4.0_32bit" />
    <remove name="aspq-ISAPI-4.0_64bit" />
    <remove name="aspq-Integrated-4.0" />
    <remove name="WebServiceHandlerFactory-ISAPI-2.0" />
    <remove name="aspq-ISAPI-4.0_32bit" />
    <remove name="WebServiceHandlerFactory-Integrated-4.0" />
    <remove name="WebServiceHandlerFactory-Integrated" />
    <remove name="SimpleHandlerFactory-ISAPI-4.0_64bit" />
    <remove name="SimpleHandlerFactory-Integrated-4.0" />
    <remove name="SimpleHandlerFactory-Integrated" />
    <remove name="SimpleHandlerFactory-ISAPI-2.0" />
    <remove name="SimpleHandlerFactory-ISAPI-2.0-64" />
    <remove name="WebServiceHandlerFactory-ISAPI-4.0_32bit" />
    <remove name="WebServiceHandlerFactory-ISAPI-4.0_64bit" />
    <remove name="WebServiceHandlerFactory-ISAPI-2.0-64" />
    <remove name="SimpleHandlerFactory-ISAPI-4.0_32bit" />
    <remove name="ISAPI-dll" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
  </handlers>
</system.webServer>

4 ответа

Если вам действительно нужен минимальный набор сопоставлений обработчиков, я предлагаю начать с чистого листа, в вашем файле web.config удалите все обработчики и просто используйте StaticFile:

<system.webServer>
    <handlers>
        <clear />
         <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
    </handlers>
</system.webServer>

Теперь добавьте все необходимые вам обработчики, только для битности и режима, в котором вы работаете.

Для базового проекта MVC может быть достаточно добавить

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />

Что делают все обработчики?

Я также не смог найти никакой документации, так что вот моя попытка:

Отображения обработчика определены в %SystemRoot%\System32\inetsrv\config\applicationHost.config - system.webServer/handlers

В моем случае было 87 отображений.

50 из них modules="IsapiModule" scriptProcessor="...aspnet_isapi.dll" для ASP.NET. Они охватывают все различные расширения asp.net и могут существовать для версий CLR 2.0 и 4.0, а также для 32-битных и 64-битных. Большинство из них для классического режима.

Они обычно обрабатывают следующие расширения:

 *.       = ExtensionlessUrlHandler-ISAPI
 *.ashx   = SimpleHandlerFactory-ISAPI
 *.asmx   = WebServiceHandlerFactory-ISAPI
 *.aspq   = aspq-ISAPI
 *.aspx   = PageHandlerFactory
 *.axd    = AXD-ISAPI
 *.cshtm  = cshtm-ISAPI
 *.cshtml = cshtml-ISAPI
 *.rem    = HttpRemotingHandlerFactory-rem-ISAPI
 *.rules  = rules-ISAPI
 *.soap   = HttpRemotingHandlerFactory-soap
 *.svc    = svc-ISAPI
 *.vbhtm  = vbhtm-ISAPI
 *.vbhtml = vbhtml-ISAPI
 *.xamlx  = xamlx-ISAPI
 *.xoml   = xoml-ISAPI

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

Большинство отображений обработчиков имеют preCondition например, применяется в 32-битных ApplicationPools или в классическом режиме. Если вы когда-либо запускаете только интегрированный режим 64Big, вы можете удалить все классические режимы и отображения 32-битных обработчиков.

Если мы посмотрим на *.cshtml для файла представления Razor, вы найдете три сопоставления, два для Classic Mode в 32/64 бита, которые указывают на модули ASP.NET ISAPI, но третье применяется только в интегрированном режиме и сопоставляется с HttpForbiddenHandler, потому что маршрутизация MVC работает по-разному в интегрированном режиме, и вы никогда не хотите разрешить доступ к просмотру файлов напрямую.

Могут быть IsapiModules для классического asp или CGI, например, там есть отображение ASP.NET для обработки запросов на файлы с определенными расширениями.

Вторая по величине группа type="System. обработчики, давайте посмотрим на них:

System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory

рукоятки *.rem а также *.soap файлы в интегрированном режиме. Может быть удалено, если вы не используете удаленное взаимодействие.

System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation

Обрабатывает определенные запросы WCF с помощью *.rules,*.xoml,*.svc расширения.

System.Web.Handlers.AssemblyResourceLoader

рукоятки WebResource.axd запросы, они могут использоваться в WebForms, но обычно не в проектах MVC.

System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions

Для обработки ScriptResource.axd который предоставляет ресурсы JavaScript и CSS в WebForms.

System.Web.Handlers.TraceHandler

Обработчик для trace.axd для отображения информации трассировки ASP.NET. На производственном сайте вы хотите удалить этот обработчик.

System.Web.Handlers.TransferRequestHandler

Используется для обработки запросов без расширений в интегрированном режиме. Это перенаправляет запрос в механизм маршрутизации, чтобы решить, как обрабатывать эти запросы. Больше информации

System.Web.Handlers.WebAdminHandler

рукоятки WebAdmin.axd отображать ASP.NET Website Administration Toolkit, вы можете удалить это, если вы не используете эту встроенную функцию.

System.Web.HttpForbiddenHandler

Позволяет нам запретить доступ к любым файлам с определенными расширениями. Однако он возвращает HTTP-статус 500 и фактически генерирует исключение System.Web.HttpException на сервере. На мой взгляд, есть лучшие способы для блога определенных расширений, таких как фильтрация запросов IIS.

System.Web.HttpMethodNotAllowedHandler

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

System.Web.HttpNotFoundHandler

Кроме того, больше не в моей текущей конфигурации. Выдает исключение 404 HTTP.

System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions

рукоятки *.asmx а также *_AppService.axd для поддержки вызовов веб-сервисов через Ajax.

System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services

Также ручки *.asmx Запросы веб-сервисов в интегрированном режиме для DOT.NET 2

System.Web.StaticFileHandler

Возвращает статический файл, больше не используется?

System.Web.UI.PageHandlerFactory

Обрабатывает страницы ASP.NET WebForm .aspx в интегрированном режиме.

System.Web.UI.SimpleHandlerFactory

Обрабатывает пользовательские обработчики ASP.NET .ashx в интегрированном режиме.

System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting

Обрабатывает службы Windows Workflow Foundation .xamlx в интегрированном режиме.


больше обработчиков:

модули ="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"

Обычно это самое последнее отображение для обработки любых запросов, которые не были обработаны ни одним из предыдущих дескрипторов. path="*" verb="*", На самом деле он использует три разных модуля. StaticFileMode one ищет физический файл, соответствующий запрошенному URL-адресу, если он не найден, DefaultDocumentModule ищет документ по умолчанию в той же папке, что и запрошенный URL-адрес, и, если он также не найден, DirectoryListingModule может отображать содержимое каталога, если включен.

модули ="ProtocolSupportModule"

Это обрабатывает все запросы для HTTP-глаголов TRACE а также OPTIONS, если вы удалите это отображение, все запросы трассировки и опций будут возвращать "метод 405 не разрешен"

Опять же, не точный ответ, но некоторая очень полезная информация (imo): https://msdn.microsoft.com/en-us/library/ms972953.aspx

На прошлой неделе я задавал тот же вопрос, и после долгих исследований я думаю, что нашел что-то похожее на GitHub:

Список «небезопасных обработчиков»: https://gist.github.com/marcbarry/47644b4a43fbfb63ef54 .

Ответ на это

Где я могу получить список того, что делают все стандартные обработчики IIS HTTP?

Откройте IIS, CMD->inetmgr, затем щелкните сопоставления обработчиков, см. Скриншот ниже.

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

Примечание. Если вы выберете виртуальный каталог, а затем выполните этот процесс, то есть щелкните сопоставления обработчика и удалите одно из сопоставлений, он добавит эту строку в файл web.config.

Например, я удалил aspq-ISAPI-4.0_64bitтак оно и изменилось web.config для этого виртуального каталога, то есть он добавил следующую строку в web.config.

<remove name="aspq-ISAPI-4.0_64bit" /> под system.webServer\handlers,

Обновление: эти обработчики вызываются, когда поступает конкретный запрос типа файла, до тех пор, пока он не будет простаивать. Таким образом, не будет никаких проблем с производительностью для этих обработчиков.

Пример того, что у вас есть removing handler for *.axd will improve securityМой ответ на это, некоторые DLL могут понадобиться эти файлы для рендеринга js и css, и если вы удалите это, это не будет работать. Например, обработчик HTTP не может найти файл axd во вложенной папке веб-приложения: Telerik RadScriptManager не может найти файл WebResource.axd в папке ~/admin/

Другие вопросы по тегам