httpservletrequest - création d'une nouvelle session / modification de l'Id de session
Je suis le maintien d'une application web Java.
En regardant dans le code de connexion, il obtient un HttpSession de HttpServletRequest via le getSession() la méthode de HttpServletRequest. (Il utilise des valeurs dans la session à des fins d'authentification)
Cependant, je suis inquiet de la fixation de session attaques donc après j'ai utilisé de la session initiale, je veux démarrer une nouvelle session ou de modifier l'id de session. Est-ce possible?
Vous devez vous connecter pour publier un commentaire.
La Servlet 3.0 API ne vous permet pas de changer l'id de session dans une session existante. En général, pour protéger contre la fixation de session, vous aurez envie de créer un nouveau et de l'invalider l'ancien bien.
Vous pouvez annuler une séance de
et puis créer une nouvelle session avec
getSession(true)
(getSession()
devrait travailler trop)Évidemment, si vous avez une des données dans la session que vous souhaitez persister, vous aurez besoin de les copier à partir de la première session de la deuxième session.
Remarque, pour la fixation de session de protection, il est communément considéré comme rien de mal à ce faire sur la demande d'authentification. Mais un niveau de sécurité plus élevé implique un jeter les vieux de la session et de faire une nouvelle session pour chaque demande.
getSession()
au lieu degetSession(boolean)
.request.getSession(false).invalidate();
avec un null-cochez la bonne réponse est.Depuis Java EE 7 et de l'API Servlet 3.1 (Tomcat 8) vous pouvez utiliser HttpServletRequest.changeSessionId() pour parvenir à de tels comportements. Il y a aussi un auditeur
HttpSessionIdListener
qui sera appelé après chaque modification.