0

我有一个使用 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()] 属性,所以我不确定它是如何让用户进入的......

4

1 回答 1

1

当您按下浏览器上的后退按钮时,将从浏览器的缓存中检索最后一页。服务器永远不会被击中。用户不再经过身份验证。这意味着如果他尝试执行某些操作并发送 HTTP 请求,他将被重定向到登录页面。防止这种情况发生的方法是从客户端浏览器缓存中排除所有经过身份验证的页面。您可以为此作业使用自定义 NoCache 操作过滤器。

于 2012-05-21T06:30:24.170 回答