ASP.NET MVC 安全和 IIS allowSubDirConfig 配置
ASP.NET MVC security and IIS allowSubDirConfig configuration
我得知 general Microsoft recommendation our web servers will be reconfigured; among other things the allowSubDirConfig setting 之后应设置为 false
。因此,我们的 ASP.NET 应用程序必须在其根级别使用单个 Web.config(顺便说一句,这对我们的应用程序来说是完全可以的)。
然而,ASP.NET MVC 使用 "non root level" 配置文件(默认情况下!)用于 Views
目录,其中包含一个简单(但重要?)与 Web 服务器相关的部分:
<system.webServer>
<handlers>
<remove name="BlockViewHandler" />
<add name="BlockViewHandler"
path="*"
verb="*"
preCondition="integratedMode"
type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
关于 a post by Phil Haack 这与安全相关,因此很重要。
由于其他 .NET Framework 相关部分 still work,因为 ASP.NET 运行时不遵守 allowSubDirConfig
设置,ASP.NET MVC 应用程序仍然可以工作。所以忽略的网络服务器配置在一般使用过程中并没有真正引起注意,虽然我对此有一种不好的感觉。
这不是个糟糕的主意吗?如果 Web 服务器以这种方式配置(根据推荐),那些 ASP.NET MVC 应用程序有多脆弱?
HttpNotFoundHandler 有一个路径属性,这意味着您可以将它添加到根配置文件并指向 Views 文件夹的路径,并且您不会以任何方式改变安全级别:
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="Views/*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
这将适用于基本的 web.config 文件,但如果您是 adding/removing 处理程序作为应用程序的一部分,请注意。 BlockViewHandler 之前的处理程序仍然可以从 Views 子文件夹传送内容(但我相信 Views 目录中的标准 web.config 也是这种情况,除非您专门删除那里的处理程序)。
一般来说,IIS 不会提供 Views 文件夹中的 .cshtml 文件(除非特别允许),即使 system.webServer 部分是 Views 子目录中的 missing/ignored。
但它会提供其他文件(例如 html、css、js),这些文件会被 BlockViewHandler 处理程序阻止,这可能会降低安全性。
我得知 general Microsoft recommendation our web servers will be reconfigured; among other things the allowSubDirConfig setting 之后应设置为 false
。因此,我们的 ASP.NET 应用程序必须在其根级别使用单个 Web.config(顺便说一句,这对我们的应用程序来说是完全可以的)。
然而,ASP.NET MVC 使用 "non root level" 配置文件(默认情况下!)用于 Views
目录,其中包含一个简单(但重要?)与 Web 服务器相关的部分:
<system.webServer>
<handlers>
<remove name="BlockViewHandler" />
<add name="BlockViewHandler"
path="*"
verb="*"
preCondition="integratedMode"
type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
关于 a post by Phil Haack 这与安全相关,因此很重要。
由于其他 .NET Framework 相关部分 still work,因为 ASP.NET 运行时不遵守 allowSubDirConfig
设置,ASP.NET MVC 应用程序仍然可以工作。所以忽略的网络服务器配置在一般使用过程中并没有真正引起注意,虽然我对此有一种不好的感觉。
这不是个糟糕的主意吗?如果 Web 服务器以这种方式配置(根据推荐),那些 ASP.NET MVC 应用程序有多脆弱?
HttpNotFoundHandler 有一个路径属性,这意味着您可以将它添加到根配置文件并指向 Views 文件夹的路径,并且您不会以任何方式改变安全级别:
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="Views/*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
这将适用于基本的 web.config 文件,但如果您是 adding/removing 处理程序作为应用程序的一部分,请注意。 BlockViewHandler 之前的处理程序仍然可以从 Views 子文件夹传送内容(但我相信 Views 目录中的标准 web.config 也是这种情况,除非您专门删除那里的处理程序)。
一般来说,IIS 不会提供 Views 文件夹中的 .cshtml 文件(除非特别允许),即使 system.webServer 部分是 Views 子目录中的 missing/ignored。
但它会提供其他文件(例如 html、css、js),这些文件会被 BlockViewHandler 处理程序阻止,这可能会降低安全性。