Java безопасный сеанс

Всякий раз, когда вы аутентифицируетесь, ваше приложение должно изменить идентификатор сеанса, который оно использует. Это помогает предотвратить настройку сеанса, копирование идентификатора сеанса, а затем обманом пользователя. Поскольку злоумышленник уже знает идентификатор сеанса, он может использовать его для доступа к сеансу после входа пользователя в систему, предоставляя им полный доступ. Эта атака была названа "фиксация сессии" среди прочего. Как я могу изменить идентификатор сессии после входа пользователя в систему?

4 ответа

Вы все еще находитесь на сервере, пока вы отменяете сеанс.

//get stuff out of session you want before invalidating it.
currentSession = request.getSession(true);
UserProfile userProfile = (UserProfile) currentSession.getAttribute("userProfile");

//now invalidate it
currentSession.invalidate();

//get new session and stuff the data back in
HttpSession newSession = request.getSession(true);
newSession.setAttribute("userProfile", userProfile);

Получить существующий; лишить законной силы это; создать новый...

1) Получить текущий сеанс с помощью HttpServletRequest.getSession ();
2) Очистить сеанс: HttpSession.invalidate ();
3) Создайте новый: HttpServletRequest.getSession (true);

Вообще говоря (поскольку это вообще не проблема Java, а общая проблема в сети), фиксация сеанса возникает, когда идентификаторы сеансов легко обнаружить или угадать. Основной метод атаки - это когда идентификатор сеанса находится в URL-адресе страницы, например, http://example.com/index?sessionId=123. Злоумышленник может настроить захват сеанса, а затем встроить ссылку на свою страницу, обманом заставив пользователя посетить ее и стать частью сеанса. Затем, когда пользователь аутентифицируется, сеанс аутентифицируется. Для этого следует не использовать идентификаторы сеансов на основе URL, а вместо этого использовать файлы cookie

Некоторые веб-приложения будут использовать сеанс cookie, основанный на исходном URL-адресе, например, посетив http://example.com/index?sessionId=123 вы увидите идентификатор сеанса в URL, а затем создадите из него cookie сеанса, установив идентификатор в файле cookie сеанса равным 123. Для этого необходимо генерировать случайные идентификаторы сеанса на сервере без использования какого-либо пользовательского ввода в качестве начального числа в генераторе.

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

Для Java общая рекомендация

session.invalidate();
session=request.getSession(true); 

Однако в какой-то момент на JBoss это не сработало - поэтому вам нужно проверить, как это работает, в рамках выбранной вами среды.

Сделайте недействительным текущий сеанс и получите новый сеанс:

//invalidate the current session
request.getSession().invalidate();
/*
get another session and get the ID (getSession()) will create a session if one does not exist
*/
request.getSession().getId();
Другие вопросы по тегам