2015-06-29 6 views
2

Я создаю веб-приложение в asp.net mvc, которое использует проверку подлинности для аутентификации пользователей. Я использую HTTP-прокси-инструмент «отрыжка» для захвата аутентифицированного пользователя cookie с проверкой подлинности. После этого я выхожу из приложения. Теперь я использую захваченный аутентифицированный файл cookie для отправки запроса на мой сервер, и сервер обрабатывает запрос как аутентифицированный запрос (даже если выход из системы для этого пользователя из моего браузера). Может ли кто-нибудь сообщить мне, где я ошибаюсь в своем коде выхода?Как аннулировать сеанс http после выхода из системы

Ниже мой журнал из кода приложения

public virtual ActionResult LogOff() 
    { 
     FormsAuthentication.SignOut(); 
     Session.Abandon(); 

     // clear authentication cookie 
     HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
     cookie1.Expires = DateTime.Now.AddYears(-1); 
     Response.Cookies.Add(cookie1); 

     // clear session cookie 
     HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); 
     cookie2.Expires = DateTime.Now.AddYears(-1); 
     Response.Cookies.Add(cookie2); 

     HttpCookie cookie3 = new HttpCookie("__RequestVerificationToken", ""); 
     cookie3.Expires = DateTime.Now.AddYears(-1); 
     Response.Cookies.Add(cookie3); 

     HttpCookie cookie4 = new HttpCookie(".ASPXAUTH", ""); 
     cookie4.Expires = DateTime.Now.AddYears(-1); 
     Response.Cookies.Add(cookie4); 


     return RedirectToAction(MVC.Account.Login()); 
    } 

Ниже приведен снимок экрана отрыжки инструмента для отправки аутентификации запроса, который дает ответ успеха

Below is the screen shot of burp tool to send authenticated request which gives success response

+0

Я вижу, что для 'cookie3' и' cookie4' вы снова исчерпали свойство 'cookie2' ?? –

+0

Можете ли вы показать код для отправки запроса с помощью захваченного аутентифицированного cookie вашего сервера и когда вы делаете это действие? –

+0

Можете ли вы разместить свой код, где вы устанавливаете файл cookie: FormsAuthentication.SetAuthCookie (model.UserName, model.RememberMe); –

ответ

4

После долгих поисков Я пришел к тому, что нет такого правильного способа аннулировать аутентифицированный файл cookie. Аутентифицированный cookie «.ASPXAUTH» (имя файла cookie для проверки подлинности по умолчанию) в основном просто содержит имя пользователя, когда он был сгенерирован и детали истечения срока действия. Это действительно не говорит, действительно ли пользователь аутентифицирован.

Если пользователь выходит из системы, этот файл cookie удаляется из браузера, но если этот файл cookie хранится где-то в памяти, он все равно будет служить аутентифицированным запросом.

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

Смежные вопросы