首先,我创建了一个空白的MVC 4 Web应用程序,并从头开始构建.
我注意到的第一件事是MVC 4中不同的事实是,以下web.config设置对网页的可访问性没有影响:
<configuration> <location path=""> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> ..... </configuration>
回到MVC 3,上述授权设置将拒绝所有匿名用户访问该站点内的任何内容.但是,如果将相同的设置添加到MVC4 Web.config文件中,匿名者可以自由选择他/他选择的URL.
在MVC 4中需要做什么来锁定所有的路径,就像我在MVC 3中一样?
解决方法
You cannot use routing or web.config files to secure your MVC application (Any Version). The only supported way to secure your MVC application is to apply the Authorize attribute…
MVC uses routes and does not map URLs to physical file locations like WebForms,PHP and traditional web servers. Therefore using web.config will definitely open a security hole in your site.
例子:
从默认的ASP.Net MVC项目(Internet / Intranet)开始.
编辑web.config添加:
<location path="Home"> <system.web> <authorization> <deny users="*"> </authorization> </system.web> </location>
运行该项目,默认情况下,您将使用默认路由/主页/索引,并看到内容,只需绕过web.config,而不更改默认模板.为什么?因为ASP.Net管道正在将请求的URL与web.config中指定的位置进行比较.然而,在授权事件在流水线中执行路由(默认路由或自定义路由)并允许访问所谓的限制区域之后.
另外,任何MVC重定向()也将绕过授权管道事件之后的路由再次发出相同的安全措施.
我不认为任何人都应该接受职业安全.第一次做到正确,不要懒惰,并使用不是专门用于特定技术的东西.