2015-07-22 5 views
0

У меня есть веб-форма asp.net. когда пользователь аутентификации, это создать Обеспеченные печенье под названием .ASPXAUTHinvalidate aspx authentification cookie

uppon выхода из системы, я называю эти 2 метода

FormsAuthentication.SignOut(); 
Session.Abandon() 

Проблема заключается в том, что у нас было испытание на проникновение, и если я украсть куки, выход из системы и вручную переустановите печенье, я снова попал в ловушку. Поэтому .aspauth не является недействительной на стороне сервера.

Я искал его, и я не могу найти ответ на этот брешь в безопасности.

+0

Вы не можете деактивировать его. 'Session.Abandon()' удалит его из вашего пользователя, а не из браузера/клиента. – Avijit

+0

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

+0

Я имею в виду, должен быть способ сообщить серверу, что токен сеанса теперь недействителен? !! –

ответ

0

Microsoft признала этот вопрос здесь: https://support.microsoft.com/en-us/kb/900111

Они предлагают несколько идей для смягчения этого уязвимость:

  1. защищает приложение посредством SSL
  2. Принудительно TTL и абсолютный срок действия
  3. Использование HttpOnly печенье и формы проверки подлинности в ASP.NET 2.0
  4. Используйте класс членства в ASP.NET 2.0

Что касается последний, я вставить содержимое от места для удобства/сохранения:

При внедрении проверки подлинности форм в ASP.NET 2.0 у вас есть возможность хранить информацию о пользователе в поставщике членства. Этот параметр является новой функцией, которая представлена ​​в ASP.NET 2.0. Объект MembershipUser содержит определенных пользователей.

Если пользователь вошел в систему, вы можете сохранить эту информацию в свойстве Comment объекта MembershipUser. Если вы используете это свойство, вы можете разработать механизм для уменьшения проблем с воспроизведением файлов cookie в ASP.NET 2.0. Этот механизм будет выполнять следующие этапы:

  1. Вы создаете HttpModule, который перехватывает событие PostAuthenticateRequest.
  2. Если объект FormsIdentity находится в свойстве HttpContext.User, класс FormsAuthenticationModule распознает билет проверки подлинности форм как действительный.
  3. Затем пользовательский класс HttpModule получает ссылку на экземпляр MemberhipUser, связанный с аутентифицированным пользователем. Вы анализируете свойство Комментарий, чтобы определить, является ли пользователь в настоящее время вошли в систему

Важно:. Вы должны хранить информацию в свойстве Комментарий указывает, что, когда пользователь явно выписался. Кроме того, вы должны очистить информацию, которая находится в свойстве «Комментарий», когда клиент в конечном итоге подписывается снова.

Если пользователь не вошли в систему, как указано в свойстве Комментарий, необходимо выполнить следующие действия:

  1. Очистить куки.
  2. Установите свойство Response.Status в значение 401.
  3. Сделайте вызов метода Response.End, который будет неявно перенаправлять запрос на страницу входа в систему.

Используя этот метод, cookie проверки подлинности форм будет приниматься только в том случае, если пользователь не был явно выписан и билет проверки подлинности форм еще не истек.