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

2024-02-01

在哪里可以获得所有默认 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>

如果您确实想要一组最小的处理程序映射,我建议您开始清理,在 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 视图文件的 *.cshtml,您会发现三个映射,其中两个用于 32/64 位的 ClassicMode,指向 ASP.NET ISAPI 模块,但第三个仅适用于集成模式并映射到 HttpForbiddenHandler,因为 MVC 路由在集成模式下的工作方式不同,并且您永远不想允许直接访问查看文件。

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

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

System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory

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

System.ServiceModel.Activation.HttpHandler、System.ServiceModel.Activation

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

System.Web.Handlers.AssemblyResourceLoader

Handles 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

用于在集成模式下处理无扩展请求。这会将请求转发给路由引擎来决定如何处理这些请求。更多信息 http://blogs.msdn.com/b/tmarq/archive/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx

System.Web.Handlers.WebAdminHandler

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

System.Web.HttpForbiddenHandler

允许我们阻止访问任何具有特定扩展名的文件。然而,它返回 500 HTTP 状态,并且实际上在服务器上引发 System.Web.HttpException 异常。 在我看来,有更好的方法来博客某些扩展,例如IIS 请求过滤 http://www.iis.net/learn/manage/configuring-security/use-request-filtering.

System.Web.HttpMethodNotAllowedHandler

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

System.Web.HttpNotFoundHandler

另外,在我当前的配置中不再如此。它抛出 404 HTTP 异常。

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

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

System.Web.Services.Protocols.WebServiceHandlerFactory、System.Web.Services

还有手柄*.asmxDOT.NET 2 集成模式下的 Web 服务请求

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


更多处理程序:

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

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

模块=“协议支持模块”

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除未使用的 HTTP 处理程序以提高性能和安全性 的相关文章

  • Google 日历重定向_uri_不匹配

    我在 Visual Studio Express 2012 for Web 中有一个网站 当我尝试以下代码时 我不断收到来自 google 的错误 该错误表示开发人员控制台中列出的重定向 uri 不匹配 private void getEv
  • 实体框架的提供程序连接字符串是否可以替换为 web.config 中已定义的数据库连接字符串?

    我在 web config 的 connectionString 部分中定义了一个数据库连接字符串 ApplicationServices 并有 3 个实体框架连接字符串 它们的提供程序连接字符串属性与 ApplicationService
  • 如何处理 ASP.NET 中未处理的线程异常?

    ASP NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常 由于错误 默认情况下 此类异常会导致进程终止 这在 ASP NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止 这也是一个性能问题 请求线程上的异常
  • ASP.NET MVC 3 中未经身份验证用户的缓存主页

    我的网站有一个主页 我想为匿名用户缓存该页面 并将其设置为经过身份验证的用户的 私有 以便他们将其保存在自己的计算机上 而不是其他地方 因此 如果用户是匿名的 我想将页面保存在服务器缓存中 并使用以下命令保存在浏览器缓存中Cache con
  • PHP 5 - 保护站点管理区域的安全

    我目前正在使用 Kohana 作为框架编写几个 MVC 站点 每个都有一个简单的管理区域 管理员可以在其中上传和编辑内容 我目前正在将管理员的用户模型存储在会话中 并使用以下方法检查他们是否是管理员 private function che
  • 如何在 ASP.NET 中的 gridview 中为每个标题列添加标题

    我正在使用 ASP NET 我有一个 gridview 我需要在每个标题列中放置一个标题 标题将显示在移动 我必须将字段转换为 TemplateField 像这样的东西
  • .NET 4.0 中的 MembershipProvider

    如何将 MembershipProvider 类添加到 VS 2010 B2 中的 NET 4 0 项目中 我想自定义一个 MembershipProvider 但是如果不添加这个类我就不能 请指导我完成这个过程 有趣的 然而 构建错误是你
  • 具有曼哈顿距离启发式的 A* 算法

    我一直在用 C 语言开发一个 15 个谜题求解器 我的代码使用的大量内存给我带来了一些问题 我不会发布我的代码 因为它太长了 我已经实现了我正在使用的大部分库 它可能会给您带来困惑 让我们从基础开始 我现在正在使用的东西是 全部用C实现 斐
  • 将字节转换为图像 ASP.NET c# 并在 Image1.Url 中使用它

    我有一个 WEB APP 它是一个网络摄像头应用程序 它拍摄图像并以字节形式存储到数据库中 话虽这么说 我也不想保存拍摄的图像并将其保存在任何类型的文件夹中现在 显示捕获的图像以供我保存并再次查看的唯一方法是 我有一个在单击捕获图像时触发的
  • 找不到指定文化或中立文化的任何资源

    我必须尝试在这个例子中使用国际化 http afana me post aspnet mvc internationalization part 2 aspx http afana me post aspnet mvc internatio
  • 在 SelectList 集合中设置所选项目

    我有一堂具有以下属性的课程 它构建了一个SelectList现有列表中的对象 然后设置所选项目 public SelectList ProviderTypeList get SelectList list new SelectList my
  • ASP.NET MVC 4 FileResult - 错误

    我在控制器上有一个返回 PDF 的简单操作 工作正常 public FileResult GetReport string id byte fileBytes manager GetReport id string fileName id
  • 阻止跨域调用 asp.net .asmx Web 服务

    我构建了一个应用程序 它使用 jQuery 和 JSON 来使用 ASP NET asmx Web 服务来执行增删改查操作 应用程序和 asmx 位于同一域中 我不介意人们远程消耗 asmx 的读取操作 但不希望人们随机删除内容 我可以将我
  • 如何在周围的 DIV 上添加额外的 CSS 类以应对失败的表单验证?

    这是我的场景 div class required div
  • 如何测量 Storm 拓扑中的延迟和吞吐量

    我正在通过示例学习 StormExclamationTopology https github com nathanmarz storm starter blob master src jvm storm starter Exclamati
  • 当我尝试在 VS 中添加文件时加载类型库/DLL 时出错(HRESULT:0x80029C4A)

    当我尝试在 Web 项目中创建视图时遇到问题 这是我的错误消息 There was an error running the selected code generator Error loading type library DLL Ex
  • Html.BeginForm() 扩展类型

    有谁知道创建自定义 HtmlHelperextension 方法的语法 其行为类似于 p Loads of html stuff here p 我正在思考一些类似的事情 有任何想法吗 Cheers ETF 传真 您需要创建一个实现的类IDi
  • 如何去掉所有标签并得到纯文本?

    我必须将用户输入文本存储在我的数据库中HTML and CSS格式 案例是 Rad编辑器 http www telerik com products aspnet ajax editor aspx 用户将文本从 MSWord 复制到此编辑器
  • 使用 MongoDB PHP 驱动程序时的安全问题

    我有在 MYSQL 上保护 sql 注入的经验 但是在使用 php 驱动程序的 MongoDB 上我应该注意什么 在大多数页面中 我通过 GET POST 和搜索 插入系统获取数据 我通过 UDID 其他字段进行搜索 并且可以插入任何字符串
  • 在哪里存储加密密钥 MVC 应用程序

    我正在使用 AES 加密 解密类 该类需要密钥值和向量值来加密和解密 MVC3 应用程序中的数据 保存记录时 我对数据进行加密 然后存储在数据库中 当我检索记录时 我在控制器中解密并将未加密的值传递给视图 我们关心的不是在数据通过网络时保护

随机推荐

  • “registration_ids”字段不是 JSON 数组 (Firebase)

    我遇到了 Firebase registration ids 的问题 当我从 Rest Client 发送请求时 我得到了成功的响应 multicast id 4650719213012935695 success 2 failure 0
  • CSS - 水平导航列表项填充所有可用空间

    使用 CSS 如何才能拥有一个水平列表并让所有列表项填充父空间的可用宽度 我将 li 的左侧浮动 然后对每个应用一些填充 但我似乎无法填充整个宽度 这样就在右侧留下了一个间隙 我可能会将最后一个项目浮动到右侧 但会发生的情况是 导航项目的活
  • 我应该使用哪些字符串操作函数?

    在我的 Windows Visual C 环境中 有很多替代方法可以完成相同的基本字符串操作任务 例如 为了进行字符串复制 我可以使用 strcpy ANSI C 标准库函数 CRT lstrcpy kernel32 dll中包含的版本 S
  • 如何以不同的百分比混合两种颜色

    我有两种颜色和一个视图组件 颜色一是我的组件的背景 我将把背景颜色更改为颜色二 但不是突然的 改变类似动画 例如 第二个 1 90 颜色 1 10 颜色 2 第二个 1 80 颜色 1 20 颜色 2 第二个 1 10 颜色 1 90 颜色
  • 如何迭代数组的数组

    迭代数组的最佳方法是什么 sounds Name 1 link 1 Name 2 link 2 Name 3 link 3 Name 4 link 4 我想要 HTML 格式的输出ul li结构 ul li Name 1 link 1 li
  • java/IBSQL 中的 SQL Firebird 实现

    所以尝试将该 SQL 代码放入我的 java 应用程序中 SELECT DISTINCT StRzImRo Rohstoff StRo Bezeichnung CAST SUM BwLsImAt Lieferungen StRzImRo M
  • 在 Windows 上用 C++ 计算 CPU 时间

    C 有没有办法计算运行给定程序或例程需要多长时间在CPU时间里 我使用在 Windows 7 上运行的 Visual Studio 2008 如果你想知道一个进程使用的CPU时间总量 clock nor rdtsc 直接或通过编译器内在函数
  • EventMachine 和 Ruby Threads - 这里到底发生了什么?

    我们一起使用 Rails 和 EventMachine 当将该组合与 Passenger 一起使用时 需要完成一些非常具体的设置 经过大量的试验和错误 我的 EventMachine 初始化运行良好 但我想更好地理解代码 正如您在下面的代码
  • Android 中的电源键事件?

    我想听电源键事件 我怎样才能做到这一点 目前我使用的代码是这样的 Override public boolean onKeyDown int keyCode KeyEvent event if KeyEvent KEYCODE POWER
  • 如何在 Subversion 中设置共享工作副本

    我对 Subversion 还很陌生 是否可以在网络可用共享 c svn projects website 上拥有每个人 在本例中为 3 个使用者 都可以检出和提交文件的工作副本 我们不需要构建服务器 因为它是一个 asp 站点 并且设计人
  • C# 检查表达式括号是否有效[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 表达方式 a i 1 8 9 应该返回 true 因为这样编写语法是有效的 每个左括号在正确的位置都有一个右闭合器 并且所有括号都处于
  • 如何将逗号和分号分隔的字符串拆分为二维数组

    假设我有一个变量users包含以下文本字符串 其中每个用户用分号分隔 每个用户的每个属性用逗号分隔 Bob 1234 email protected cdn cgi l email protection Mark 5678 email pr
  • 如何在 Ruby 中找到两个 Date 对象之间的天数?

    如何找到两个 Date 对象之间的天数 从结束日期减去开始日期 endDate beginDate
  • 解析 haskell 保留注释/格式

    我想做一些源代码转换 自动导入列表清理 并且我想保留注释和格式 我断断续续地听到过一些关于执行此操作的解析器的内容 我认为是 ghc 解析器 看来我可以通过从文件中提取内容来使用 hs src exts Language Haskell E
  • 库模块中的崩溃报告

    我已经尝试过 crashlytics 但不支持 这是我从他们团队得到的回复 感谢您对此的关注 Crashlytics 或 Fabric 的任何部分都不能包含在分发给外部应用程序的任何 SDK 中 正如您提到的 这将导致 SDK 和应用程序发
  • 查看运行“sbt”中“.sbtopts”中的选项

    根据这有帮助post https stackoverflow com a 14561346 409976 我删除了我的 sbtconfig 并添加了 sbtopts cd myProject cat sbtopts J Xmx4G J XX
  • 如何将 UIImage 转换为 BMP 并另存为数据(不是 JPG 或 PNG)

    我正在我的 iOS 应用程序 Swift 3 和仅支持 BMP 格式的应用程序 在 MS Windows 上 之间同步 BMP 图像 在 MS Windows 应用程序上创建的 BMP 图像作为 base64 字符串下载 另存为Data并使
  • 当源中存在其他静态文件时,为什么我无法在 django 项目中添加静态文件?

    我正在尝试为 Heroku 构建一个 Django 应用程序 并且已经完成了民意调查教程并且Heroku 文档 https devcenter heroku com articles django assets 当使用基本的 Django
  • Weld/CDI 的最佳调试技巧是什么?

    Java EE 6 的优点之一是新的依赖项注入框架 具有 Weld 参考实现的 CDI 它促使我们开始以与实现无关的方式内部迁移到 JSR 330 其明确目标是能够拥有核心 jar 被冻结 然后能够添加额外的 jar 提供新的模块来替换核心
  • 删除未使用的 HTTP 处理程序以提高性能和安全性

    在哪里可以获得所有默认 IIS HTTP 处理程序的功能列表 我需要文档 我读过一些博客 出于性能和安全原因 建议删除数十个未使用的 HTTP 处理程序 例如 建议删除 TraceHandler Integrated 和 TraceHand