web-dev-qa-db-fra.com

httpservletrequest - créer une nouvelle session / modifier l'ID de session

Je gère une application Web Java Java.

En examinant le code de connexion, il obtient une HttpSession de HttpServletRequest via la méthode getSession () de HttpServletRequest. (Il utilise certaines valeurs dans la session à des fins d'authentification)

Cependant, je m'inquiète des attaques de fixation de session, donc après avoir utilisé la session initiale, je veux soit démarrer une nouvelle session soit changer l'ID de session. Est-ce possible?

35
AJM

L'API Servlet 3.0 ne vous permet pas de modifier l'ID de session sur une session existante. En règle générale, pour vous protéger contre la fixation de session, vous souhaiterez simplement en créer un nouveau et invalider l'ancien également.

Vous pouvez invalider une session comme celle-ci

request.getSession(false).invalidate();

puis créer une nouvelle session avec

getSession(true) (getSession() devrait aussi fonctionner)

Évidemment, si vous avez des données dans la session que vous souhaitez conserver, vous devrez les copier de la première session à la deuxième session.

Remarque: pour la protection de la fixation de session, il est généralement considéré comme correct de le faire uniquement sur la demande d'authentification. Mais un niveau de sécurité plus élevé implique de lancer l'ancienne session et de créer une nouvelle session pour chaque demande.

41
pablochan

Depuis Java EE 7 et Servlet API 3.1 (Tomcat 8), vous pouvez utiliser HttpServletRequest.changeSessionId () pour obtenir ce comportement. Il existe également un écouteur HttpSessionIdListener qui sera invoqué après chaque modification.

27
Jakub Kubrynski