Как избежать перехвата сессии в MVC5 + Identity?/ Недействительный файл cookie на стороне сервера - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть полностью работающее веб-приложение, созданное с использованием MVC5 и Aspnet Identity (локальные учетные записи + аутентификация на основе файлов cookie).Мы провели аудит безопасности на сайте, и результаты показали, что наш сайт уязвим для перехвата сеансов.Чтобы воспроизвести уязвимость, выполните следующие действия:

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 день.

...