iis 删除未使用的HTTP处理程序以提高性能和安全性

vyu0f0g1  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(113)

我在哪里可以获得所有默认IIS HTTP处理程序的功能列表?我需要文档!!我读过一些博客,它们建议出于性能和安全原因删除几十个未使用的HTTP处理程序。
例如,建议删除TraceHandler-Integrated和TraceHandler-Integrated-4.0,因为否则导航到/trace.axd会导致500内部服务器错误而不是404未找到,并且在生产环境中不应启用跟踪。
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>
4uqofj5v

4uqofj5v1#

如果你真的想要一个最小的处理程序Map集,我建议你从干净开始,在你的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" />

所有的管理员都做什么?
我也找不到任何文档,所以下面是我的尝试:
处理程序Map在%SystemRoot%\System32\inetsrv\config\applicationHost.config - system.webServer/handlers中定义
在我的例子中,有87个Map。
其中50个是ASP.NET的modules="IsapiModule" scriptProcessor="...aspnet_isapi.dll"。这些扩展涵盖了所有各种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

如果您的项目不使用某些扩展,则可以删除这些处理程序。
在32位ApplicationPools中或经典模式下,大多数处理程序Map都具有preCondition,如apply。如果您只运行过64 Big集成模式,则可以删除所有经典模式和32位处理程序Map。
如果我们查看Razor视图文件的 *.cshtml,您将发现三个Map,两个用于32/64位的ClassicMode,它们指向ASP .NETISAPI模块,但第三个仅适用于集成模式,并Map到HttpForbiddenHandler,因为MVC路由在集成模式下的工作方式不同,您永远不希望允许直接访问视图文件。
可能存在用于经典asp或CGI的IsapiModule,如ASP.NETMap,用于处理对具有特定扩展名的文件的请求。
第二大组是type="System.处理程序,让我们看看它们:

系统.运行时.远程处理.通道.Http.HttpRemotingHandlerFactory

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

系统.服务模型.激活.HttpHandler,系统.服务模型.激活

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

系统.Web.处理程序.程序集资源加载程序

处理WebResource.axd请求,这些请求可能用于WebForms,但通常不用于MVC项目。

系统.Web.处理程序.脚本资源处理程序,系统.Web.扩展

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

系统.Web.处理程序.跟踪处理程序

用于显示ASP.NET跟踪信息的trace.axd的处理程序。在生产站点上,您希望移除此处理程序。

系统.Web.处理程序.传输请求处理程序

用于在集成模式下处理无扩展请求。这会将请求转发到路由引擎,以决定如何处理这些请求。More Info

系统.Web.处理程序. Web管理员处理程序

处理WebAdmin.axd以显示ASP.NET Website Administration Toolkit,如果您不使用该内置功能,则可以删除它。

系统.Web.HttpForbiddenHandler(禁止访问系统的网页)

允许我们阻止访问任何带有特定扩展名的文件。但是它返回一个500 HTTP状态,并且实际上在服务器上抛出了一个System.Web.HttpException异常。在我看来,有更好的方法来写某些扩展名的博客,比如IIS Request Filtering

系统.Web.HttpMethodNotAllowedHandler(不允许的HTTP方法处理程序)

我认为现代IIS中已不再使用此方法,它返回405 HTTP状态,并抛出和HttpException

系统.Web.HttpNotFoundHandler

而且,在我当前的配置中不再是这样。它抛出了一个404 HTTP异常。

系统.Web.脚本.服务.ScriptHandlerFactory,系统.Web.扩展

处理*.asmx*_AppService.axd以支持通过 AJAX 进行的Web服务调用。

系统.Web.服务.协议. Web服务处理器工厂,系统.Web.服务

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

系统.Web.静态文件处理程序

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

系统.Web.用户界面.页面处理程序工厂

在集成模式下处理ASP.NET WebForm页.aspx

系统.Web.用户界面.简单处理程序工厂

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

系统.Xaml.装载.XamlHttpHandlerFactory,系统.Xaml.装载

在集成模式下处理Windows Workflow Foundation服务.xamlx
更多处理程序:

modules=“静态文件模块,默认文档模块,目录列表模块”

这通常是最后一个Map来处理任何没有被以前的句柄path="*" verb="*"处理过的请求。它实际上使用了三个不同的模块。StaticFileMode模块查找与请求的URL匹配的物理文件,如果没有找到,DefaultDocumentModule模块在与请求的URL相同的文件夹中查找默认文档,如果也没有找到,DirectoryListingModule可以显示目录的内容(如果启用的话)。

模块=“协议支持模块”

这将处理HTTP predicate TRACEOPTIONS的所有请求,如果删除此Map,则所有跟踪和选项请求都将返回“405不允许使用此方法”

3phpmpom

3phpmpom2#

对此的回答是:
我可以从哪里获得所有默认IIS HTTP处理程序的列表?
打开IIS,CMD--〉inetmgr,然后单击处理程序Map,见下面的屏幕截图。

单击该按钮,它将显示该Web服务器的所有默认启用的HTTP处理程序。

**注意:**当您选择一个虚拟目录,然后执行此过程(即单击处理程序Map,然后删除其中一个Map)时,将在web. config中添加该行。

例如,我删除了aspq-ISAPI-4.0_64bit,因此它更改了该虚拟目录的web.config,也就是说,它在web. config中添加了以下行。
system.webServer\handlers下的<remove name="aspq-ISAPI-4.0_64bit" />

更新:这个处理程序在特定的文件类型请求到来时被调用,直到那时它处于空闲状态。所以不会有任何性能问题。

例如,您有removing handler for *.axd will improve security,我对此的回答是,一些DLL可能需要这些文件来呈现js和css,如果您删除这些文件,它将无法工作。例如-HTTP Handler cannot find axd file in nested web application folder: Telerik RadScriptManager cannot find WebResource.axd in ~/admin/ folder

webghufk

webghufk3#

我上周也在问同样的问题,经过大量的研究,我想我在GitHub中找到了类似的东西:
“不安全的处理程序”列表:https://gist.github.com/marcbarry/47644b4a43fbfb63ef54

相关问题