我已获悉,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应用程序有多脆弱?
答案 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处理程序阻止,这可能会被视为安全性降低。