16

我第一次使用 MVC 4 来检查与 MVC 3 相比发生了哪些更改/添加/等。

首先,我创建了一个空白的 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 中那样锁定所有路径?

4

1 回答 1

25

查看保护您的 ASP.NET MVC 4 应用程序和新的 AllowAnonymous Attribute

您不能使用路由或 web.config 文件来保护您的 MVC 应用程序(任何版本)。保护 MVC 应用程序的唯一受支持的方法是应用 Authorize 属性...

引用

MVC 使用路由并且不将 URL 映射到 WebForms、PHP 和传统 Web 服务器等物理文件位置。因此,使用 web.config 肯定会在您的站点中打开一个安全漏洞。

如果以后有变化,产品团队会有沟通,但目前无一例外。

例子:

从默认的 ASP.Net MVC 项目(internet/intranet)开始。

编辑 web.config 添加:

<location path="Home">
  <system.web>
    <authorization>
      <deny users="*">
    </authorization>
  </system.web>
</location>

运行项目,默认情况下,您将使用Default路由/Home/Index并看到内容,只需绕过 web.config 而不更改默认模板。为什么?因为 ASP.Net 管道将请求的 URL 与 web.config 中指定的位置进行比较。但是,在管道中执行授权事件后,路由发生(默认路由或自定义路由)并允许访问所谓的受限区域。

此外,任何 MVCRedirect()还将绕过与在授权管道事件之后再次发生路由相同的安全措施。

我认为任何人都不应该接受某种工作安全性。第一次正确地做,不要偷懒,使用不是为特定技术设计的东西。

于 2012-08-01T18:20:01.103 回答