ASP.NET MVC安全性和IIS allowSubDirConfig配置

时间:2015-01-19 07:14:25

标签: asp.net asp.net-mvc security iis

我已获悉,general Microsoft recommendation我们的网络服务器将被重新配置;除其他事项外,allowSubDirConfig setting应设置为false。因此,我们的ASP.NET应用程序必须在其根级别使用单个Web.config(顺便说一句,这对我们的应用程序来说非常好)。

但是,ASP.NET MVC使用"非根级别"配置文件(默认情况下!)为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服务器配置在一般使用过程中并没有引起人们的注意,尽管我对此感觉不好。

这不是一个糟糕的想法吗?如果以这种方式配置Web服务器(通过推荐),那些ASP.NET MVC应用程序有多脆弱?

1 个答案:

答案 0 :(得分:2)

HttpNotFoundHandler有一个path属性,这意味着你可以将它添加到根配置文件并指向Views文件夹的路径,你不会以任何方式改变安全级别:

  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="Views/*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

这将与基本的web.config文件一起使用,但请注意,如果要在应用程序中添加/删除处理程序。 BlockViewHandler之前的处理程序仍然可以从Views子文件夹中提供内容(但我相信View目录中的标准web.config也是这种情况,除非你专门删除处理程序)。

一般来说,即使在Views子目录中缺少/忽略了system.webServer部分,IIS也不会从Views文件夹中提供.cshtml文件(除非特别允许)。

但它会服务于其他文件(例如html,css,js),这些文件会被BlockViewHandler处理程序阻止,这可能会被视为安全性降低。