在我们的网络应用程序,即MVC5,与Owin,当我们退出时,我们有这个代码:
public ActionResult LogOut()
{
using (MiniProfiler.Current.Step("AccountController.LogOut"))
{
Session.Clear();
Session.Abandon();
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
return RedirectToDefault();
}
}
Startaup.Auth看起来像这样:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieName = ".<cookiename>",
LoginPath = new PathString("/Account/LogOn")
});
我们验证了,退出后,客户端(在浏览器中)的cookie将被删除。但后来我们得到第三方的安全评估说:
&#34;当用户退出Web应用程序时,他们的会话应该在服务器端和客户端无效。 在Workforce应用程序中,当用户注销时,服务器不会在服务器端终止用户的cookie。 注销后,用户仍然可以利用旧的cookie值来访问内部页面和信息。 在共享计算机环境中,这可以允许未经授权的用户使用先前用户的会话访问内部应用程序页面和数据。建议:当用户退出应用程序时,服务器应终止客户端和服务器端的用户会话。应该为用户的浏览器删除HTTP cookie,并且应该删除服务器上的会话和相关会话变量。有关更多信息,请参阅OWASP身份验证备忘单的会话管理部分:https://www.owasp.org/index.php/Authentication_Cheat_Sheet&#34;
基本上问题是,如果复制授权cookie,为什么用户已登录,然后在注销后手动应用,则该站点接受登录。当我对我的银行尝试这个伎俩时,它没有用。所以,这份报告背后有一些优点。
知道我们如何解决这个问题吗?
答案 0 :(得分:2)
经过对团队的一些调查,我们得出以下结论:它是如何工作的。
有问题的Cookie不是与会话相关的Cookie。它们是具有加密声明的cookie。所以,我们实际观察到的是在服务器上正确关闭会话。但是,如果那些&#34;认证&#34; cookie附加到新请求,并且身份验证尚未过期,Web服务器只创建新会话。
指向我们答案的非常有用的链接是:http://forums.asp.net/t/1988295.aspx?Session+Authentication+not+removed+server+side+after+logout