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

Httpservletrequest - создать новый сеанс/изменить сеанс Id

Я поддерживаю веб-приложение Java.

Заглядывая в код входа, он получает HttpSession из HttpServletRequest с помощью метода getSession() HttpServletRequest. (Он использует некоторые значения в сеансе для целей аутентификации)

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

4b9b3361

Ответ 1

API Servlet 3.0 не позволяет вам изменять идентификатор сеанса в существующем сеансе. Как правило, для защиты от фиксации сеанса вам нужно просто создать новый и аннулировать старый.

Вы можете аннулировать сеанс, подобный этому

request.getSession(false).invalidate();

а затем создайте новый сеанс с

getSession(true) (getSession() тоже должен работать)

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

Обратите внимание, что для защиты фиксации сеанса обычно считается, что нужно просто сделать это в запросе аутентификации. Но более высокий уровень безопасности связан с переходом старой сессии и созданием нового сеанса для каждого запроса.

Ответ 2

Так как Java EE 7 и Servlet API 3.1 (Tomcat 8) вы можете использовать HttpServletRequest.changeSessionId() для достижения такого поведения. Также есть слушатель HttpSessionIdListener, который будет вызываться после каждого изменения.