1

我有一个使用 MVC5 和 Aspnet Identity(本地帐户 + 基于 cookie 的身份验证)制作的完全可用的 Web 应用程序。我们对该站点进行了安全审计,结果表明我们的站点容易受到会话劫持。重现漏洞的步骤如下:

1 使用有效用户登录 2 从请求中复制 cookie 值 3 注销 4 请求任何受保护的页面,将复制的 cookie 添加到请求标头

即使浏览器删除浏览器中的 cookie 并成功注销用户,COOKIE 值仍然有效。换句话说,我们客户的安全部门要求的是使 COOKIE 无效的服务器端。

到目前为止,我尝试在注销控制器中更改 cookie 的安全标记,但 cookie 仍然有效。

这是我的身份验证配置,设置为在初始登录后 24 小时使令牌过期

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromDays(1),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });       

这是我的注销控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
   string userId = User.Identity.GetUserId();
         AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
            UserManager.UpdateSecurityStampAsync(userId);
            return RedirectToAction("Index", "Home");
}

现在,结果是一样的:在用户注销后,任何人都可以使用 cookie 来模拟原始登录用户。

我期望完成的是注销并使特定的 cookie 值成为无效的服务器端,以便在注销后没有人可以使用它。如果用户没有明确注销,则该 cookie 应在 1 天后失效。

4

0 回答 0