删除未使用的HTTP处理程序以获得更好的性能和安全性

Muh*_*eed 8 asp.net security iis performance httphandler

我在哪里可以获得所有默认IIS HTTP处理程序的列表?我需要文件!! 我已经阅读了一些博客,建议删除数十个未使用的HTTP处理程序,以提高性能和安全性.

例如,建议删除TraceHandler-Integrated和TraceHandler-Integrated-4.0,否则导航到/trace.axd会导致500内部服务器错误而不是404 Not Found,并且您不应该在生产环境中进行跟踪.

GitHub项目(现已删除)建议从您的站点删除的一些HTTP处理程序:

<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>
Run Code Online (Sandbox Code Playgroud)

Pet*_*orf 16

如果你真的想要一组最小的处理程序映射,我建议你开始干净,在你的web.config中删除所有处理程序并只使用StaticFile:

<system.webServer>
    <handlers>
        <clear />
         <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
    </handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

现在添加您需要的所有处理程序,仅用于您运行的位数和模式.

对于基本的MVC项目,它可能足以添加

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

所有处理程序做什么?

我也找不到任何文件,所以这是我的尝试:

处理程序映射定义在 %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
Run Code Online (Sandbox Code Playgroud)

如果您的项目不使用某些扩展名,则可以删除这些处理程序.

大多数处理程序映射都preCondition适用于32位ApplicationPools,或者在经典模式下.如果您只运行64Big集成模式,则可以删除所有经典模式和32位处理程序映射.

如果我们查看Razor视图文件的*.cshtml,您会发现三个映射,两个用于32/64位的ClassicMode指向ASP.NET ISAPI模块,但第三个仅适用于集成模式并映射到HttpForbiddenHandler,因为MVC路由在集成模式下的工作方式不同,您永远不希望允许直接访问视图文件.

可能有经典的asp或CGI的IsapiModules,就像那里有ASP.NET映射来处理具有特定扩展名的文件的请求.

第二大组是 type="System.处理程序,让我们来看看它们:

System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory

处于集成模式的句柄*.rem*.soap文件.如果您不使用远程处理,可以删除.

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

处理具有*.rules,*.xoml,*.svc扩展名的某些WCF请求.

System.Web.Handlers.AssemblyResourceLoader

处理WebResource.axd请求,这些可以在WebForms中使用,但通常不在MVC项目中.

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

用于ScriptResource.axd在WebForms中提供JavaScript和CSS资源的处理.

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

允许我们阻止访问具有特定扩展名的任何文件.但是,它返回500 HTTP状态,并实际上在服务器上抛出System.Web.HttpException异常.在我看来,有更好的方法来博客某些扩展,如IIS请求筛选.

System.Web.HttpMethodNotAllowedHandler

我认为这个不再在现代IIS中使用,它返回405 HTTP状态并且还抛出和HttpException

System.Web.HttpNotFoundHandler

此外,不再是我当前的配置.它会抛出404 HTTP异常.

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

通过Ajax 处理*.asmx*_AppService.axd支持Web服务调用.

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

*.asmx以DOT.NET 2的集成模式处理Web服务请求

System.Web.StaticFileHandler

返回一个不再使用的静态文件?

System.Web.UI.PageHandlerFactory

.aspx以集成模式处理ASP.NET WebForm页面.

System.Web.UI.SimpleHandlerFactory

.ashx在集成模式下处理ASP.NET自定义处理程序.

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

.xamlx以集成模式处理Windows Workflow Foundation服务.


更多处理程序:

模块= "StaticFileModule,DefaultDocumentModule,DirectoryListingModule"

这通常是处理任何先前句柄尚未处理的任何请求的最后一个映射path="*" verb="*".它实际上使用三个不同的模块.StaticFileMode查找与请求的URL匹配的物理文件,如果找不到,则DefaultDocumentModule在请求的URL所在的文件夹中查找默认文档,如果找不到,则DirectoryListingModule可以显示目录的内容.启用.

模块= "ProtocolSupportModule"

这种处理所有请求的HTTP动词TRACEOPTIONS,如果你删除此映射,所有跟踪和选项请求将返回一个"不允许405方法"

  • 我不敢相信微软没有关于这个主题的文档。他们通常非常擅长文档。可悲的是,这似乎是我们目前能得到的最好答案。 (2认同)

Ari*_*yak 0

对此的回答:

在哪里可以获取所有默认 IIS HTTP 处理程序的功能列表?

打开 IIS,CMD-->inetmgr,然后单击处理程序映射,请参见下面的屏幕截图。

在此输入图像描述

单击该按钮,它将显示该 Web 服务器的所有默认启用的 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 处理程序无法在嵌套 Web 应用程序文件夹中找到 axd 文件:Telerik RadScriptManager 无法在 ~/admin/ 文件夹中找到 WebResource.axd