Подтвердить что ты не робот

Фиксация сеанса в ASP.NET

Мне интересно, как предотвратить атаки с фиксацией сеанса в ASP.NET(см. http://en.wikipedia.org/wiki/Session_fixation)

Мой подход к этому обычно заключался бы в создании и выпуске нового идентификатора сеанса всякий раз, когда кто-то входит в систему. Но возможен ли этот уровень контроля на земле ASP.NET?

4b9b3361

Ответ 1

Делали больше копания в этом. Лучшим способом предотвращения атак сеансовой фиксации в любом веб-приложении является выдача нового идентификатора сеанса при входе пользователя в систему.

В ASP.NET Session.Abandon() недостаточно для этой задачи. Microsoft заявляет в http://support.microsoft.com/kb/899918, что: "" Когда вы отказываетесь от сеанса, cookie идентификатора сеанса не удаляется из браузера пользователя. Поэтому, как только сеанс будет удален, любые новые запросы к одному и тому же приложению будут использовать один и тот же идентификатор сеанса, но будут иметь новый экземпляр состояния сеанса. ""

Исправление ошибки было запрошено для этого на https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=143361&wa=wsignin1.0&siteid=210#details

Существует обходное решение для обеспечения того, чтобы новые идентификаторы сеанса были сгенерированы в http://support.microsoft.com/kb/899918. Это включает вызов Session.Abandon, а затем очистку сеанса id cookie.

Было бы лучше, если бы ASP.NET не полагался на разработчиков, чтобы сделать это.

Ответ 2

Если я прав, вы говорите о... http://en.wikipedia.org/wiki/Session_fixation. Короткий ответ - да, у вас есть много способов, которыми вы можете защитить свой файл cookie. Вы не должны использовать cookieless-сеанс, и пока вы используете сеансы, убедитесь, что вы также явно сохранили файл cookie.

Отметьте эту статью... http://blogs.msdn.com/rahulso/archive/2007/06/19/cookies-case-study-with-ssl-and-frames-classic-asp.aspx

Надеюсь, что это поможет...

Ответ 3

В основном просто сделайте это в своем методе Login GET и вашем методе выхода:

        Session.Clear();
        Session.Abandon();
        Session.RemoveAll();
        if (Request.Cookies["ASP.NET_SessionId"] != null)
        {
            Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
            Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);
        }

Ответ 4

Он генерирует новый идентификатор сеанса, когда пользователь входит в систему, и убивает сеанс, когда происходит тайм-аут, или пользователь перемещается в браузере. И вы можете программировать его с помощью Abandon() или удалить записи через Remove().

Итак, я не уверен, в чем проблема?