MVC表单身份验证允许直通

时间:2014-05-29 14:32:44

标签: asp.net-mvc authorization forms-authentication asp.net-mvc-5

我有一个MVC 5应用程序,其[authorize]属性位于我的控制器的类顶部,我不希望未经授权的用户访问。我的Web.config文件中的设置中包含以下内容

<location path="">
  <system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
  <authorization>
    <deny users="?"/>
  </authorization>
  <authentication mode="Forms">
    <forms loginUrl="~/Login" timeout="15" />
  </authentication>
</system.web>
</location>

当我运行应用程序时,我被重定向到登录页面,但是,如果我知道我想要的Controller / Action的名称,我可以绕过登录页面而不输入任何凭据,例如上面相同的控制器我在类级别放置了[Authorize]属性。这不应该发生。我意识到这可能与我的路径=&#34;&#34;但是我试图拒绝所有访问权限,直到用户登录并且我尝试了#34; *&#34;和&#34;〜&#34;但他们没有工作。

1 个答案:

答案 0 :(得分:2)

首先,MVC5默认不使用FormsAuthentication。它使用ASP.NET身份。因此,将身份验证格式设置为“表单”将导致问题,除非您实际使用的是Windows窗体。实际上,您可能会在web.config中找到它,它会完全禁用它:

<system.webServer>
  <modules>
    <remove name="FormsAuthenticationModule" />
  </modules>
</system.webServer>

其次,微软的官方立场是你无法通过web.config位置配置来保护MVC应用程序。

http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx

  

您无法使用路由或web.config文件来保护您的MVC应用程序。保护MVC应用程序唯一受支持的方法是将Authorize属性应用于每个控制器,并在登录和注册操作上使用新的AllowAnonymous属性。根据当前区域做出安全决策是非常糟糕的事情,并会将您的应用程序打开到漏洞中。

     

永远不应在MVC应用程序中使用基于Web.config的安全性。这样做的原因是多个URL可能会触及控制器,并且将这些检查放在Web.config中总是会遗漏某些内容。