gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:46:21 28 4
gpt4 key购买 nike

在哪里可以获得所有默认 IIS HTTP 处理程序的功能列表?我需要文件!!我读过一些博客,出于性能和安全原因,这些博客建议删除数十个未使用的 HTTP 处理程序。
例如。建议删除 TraceHandler-Integrated 和 TraceHandler-Integrated-4.0,否则导航到/trace.axd 会导致 500 Internal Server Error 而不是 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>

最佳答案

如果你真的想要一组最少的处理程序映射,我建议你开始清理,在你的 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 位应用程序池中应用,或者在经典模式中应用。如果您只运行 64Big 集成模式,则可以删除所有经典模式和 32 位处理程序映射。

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

可能有用于经典 asp 或 CGI 的 IsapiModules,例如 ASP.NET 映射,那里可以处理对具有某些扩展名的文件的请求。

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

System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory

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

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

使用 *.rules,*.xoml,*.svc 处理某些 WCF 请求扩展名。

System.Web.Handlers.AssemblyResourceLoader

Handlebars 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

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

System.Web.Handlers.WebAdminHandler

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

System.Web.HttpForbiddenHandler

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

System.Web.HttpMethodNotAllowedHandler

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

System.Web.HttpNotFoundHandler

此外,不再在我当前的配置中。它会引发 404 HTTP 异常。

System.Web.Script.Services.ScriptHandlerFactory、System.Web.Extensions

Handlebars *.asmx*_AppService.axd通过 Ajax 支持 Web 服务调用。

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

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

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在集成模式下。

更多处理程序:

modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"

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

modules="ProtocolSupportModule"

这将处理对 HTTP 动词的所有请求 TRACEOPTIONS , 如果删除此映射,所有跟踪和选项请求将返回“405 Method not allowed”

关于asp.net - 删除未使用的 HTTP 处理程序以获得更好的性能和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856991/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com