Правильное закрытие сеанса в owin MVC5

В нашем веб-приложении, которое является 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 на клиенте (в браузере) удаляются. Но затем мы получили оценку безопасности от третьей стороны, в которой говорилось:

"Когда пользователь выходит из веб-приложения, его сеанс должен быть аннулирован на стороне сервера и на стороне клиента. В приложении Workforce сервер не удаляет файлы cookie пользователя на стороне сервера, когда пользователь выходит из системы. После выхода пользователи по-прежнему могут использовать старые значения файлов cookie для доступа к внутренним страницам и информации. В среде с общим компьютером это может позволить неавторизованному пользователю получить доступ к внутренним страницам приложения и данным, используя предыдущий сеанс пользователя. пользователи выходят из приложения, сервер должен завершить сеанс пользователя на стороне клиента и на стороне сервера. Файлы cookie HTTP должны быть удалены для браузера пользователя, а сеанс и связанные с ним переменные сеанса на сервере должны быть удалены. Для получения дополнительной информации , см. раздел управления сессиями Памятки по аутентификации OWASP: https://www.owasp.org/index.php/Authentication_Cheat_Sheet"

В основном проблема заключается в том, что если файлы cookie авторизации копируются, почему пользователь вошел в систему, а затем вручную применяются после выхода, сайт принимает вход. Когда я попробовал этот трюк против своего банка, он не сработал. Итак, за этим отчетом есть некоторые достоинства.

Любая идея, как мы можем решить эту проблему?


person Maxim Alexeyev    schedule 02.08.2015    source источник


Ответы (1)


После некоторого исследования с нашей командой мы пришли к следующему выводу, как это работает.

Рассматриваемые файлы cookie не являются файлами cookie, связанными с сеансом. Это файлы cookie с зашифрованными утверждениями. Итак, что мы на самом деле наблюдали, так это правильное закрытие сеанса на сервере. Однако, если эти файлы cookie «аутентификации» прикреплены к новому запросу, а срок действия аутентификации еще не истек, веб-сервер просто создает новый сеанс.

Очень полезная ссылка, которая указала нам на ответ, такова: http://forums.asp.net/t/1988295.aspx?Session+Authentication+not+removed+server+side+after+logout

person Maxim Alexeyev    schedule 02.08.2015
comment
Очень полезная ссылка - можете ли вы уточнить, что конкретно вы сделали для решения этой проблемы? В ссылке упоминается встраивание дополнительной информации о пользователе в токен, а затем написание httpmodule, который проверяет это. Это то, что вы в итоге сделали? - person fredw; 26.09.2016