【发布时间】:2012-05-27 11:17:19
【问题描述】:
我有一个使用 razor 的 ASP.net MVC 3 应用程序,当使用默认 AccountController 注销当前用户时,我发现了一个安全问题。单击注销(_LogoutPartial 视图)后,我被重定向到登录页面。很好,但是当我在浏览器上单击返回时,它允许我返回 Web 应用程序并且不会要求我登录。
带参数的路由如下:
routes.MapRoute(
"Person", // Route name
"Person/{profileName}/{action}/{id}", // URL with parameters
new { controller = "Person", action = "Index", id = UrlParameter.Optional } // defaults
);
//example http://localhost:1946/Person/JoeBlack/ListTeamMembers
似乎 {profileName} 在会话中仍处于活动状态 (?) 并允许调用控制器。但是控制器操作 {ListTeamMembers} 具有 [Authorize()] 属性,所以我不确定它是如何让用户进入的......
【问题讨论】:
-
不,他们只是从缓存中看到页面。或者您没有正确注销它们。
-
谢谢安德鲁。这是否意味着我需要检查每个 Action 方法,检查是否存在活动的用户会话,如果没有,则重定向到登录?
-
这就是 Authorize 属性的作用。问题是浏览器在按下 [返回] 后根本不会尝试再次加载页面,它只是向他们显示缓存。对受保护的控制器操作不实施缓存策略会有所帮助。
标签: asp.net asp.net-mvc-3 routes logout