【问题标题】:ASP.NET MVC security and IIS allowSubDirConfig configurationASP.NET MVC 安全和 IIS allowSubDirConfig 配置
【发布时间】:2015-01-19 07:14:24
【问题描述】:

我已获悉,在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 应用程序有多脆弱?

【问题讨论】:

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


    【解决方案1】:

    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 子文件夹传递内容(但我相信 Views 目录中的标准 web.config 也是这种情况,除非您专门删除那里的处理程序)。

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

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

    【讨论】:

    • 谢谢,path 属性有帮助。我从 Views/Web.config 中删除了 BlockViewHandler 并能够下载 .png 文件;将您的配置添加到根 Web.config 后,它再次被阻止。但是,如果开发人员没有意识到这个“问题”……简而言之,那就太糟糕了。
    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2011-01-29
    • 2014-12-24
    • 1970-01-01
    相关资源
    最近更新 更多