Réglage httponly dans cookie JSESSIONID (Java EE 5)
Je suis en train de définir le drapeau httponly sur le cookie JSESSIONID. Je travaille dans Java EE 5, cependant, et ne peut pas utiliser setHttpOnly()
. J'ai d'abord essayé de créer mon propre cookie JSESSIONID de l'intérieur de la servlet doPost()
en utilisant response.setHeader()
.
Quand cela ne fonctionne pas, j'ai essayé response.addHeader()
. Qui n'a pas fonctionné non plus. Ensuite, j'ai appris que la servlet géré la conversion de la session dans un cookie JSESSIONID et de l'insérer dans l'en-tête http, donc si je veux jouer avec le cookie, je vais avoir à écrire un filtre. J'ai écrit un filtre et joué avec setHeader()
/addHeader()
là, de nouveau, en vain.
Puis, j'ai appris qu'il y a une flush/fermer l'action se passe dans la réponse de l'objet avant qu'il arrive au filtre de sorte que si je veux manipuler les données, j'ai besoin d'étendre HttpServletResponseWrapper
et passer à filterChain.doFilter()
. C'est fait mais je suis toujours pas à obtenir des résultats. Clairement, je suis en train de faire quelque chose de mal mais je ne sais pas quoi.
Je ne suis pas sûr si cela est pertinent à la question à portée de main, mais aucun document html est retourné par le servlet pour le navigateur. Tout ce qui se passe vraiment, c'est que certains objets sont remplies et retournées à un document JSP. J'ai sorte de supposer que L'objet Session est transformé en un cookie JSESSIONID et enveloppé -- avec les objets ajoutés à la demande, dans un en-tête http, avant d'être envoyé au navigateur.
Je serais heureux de poster du code, mais je veux exclure la possibilité que mes difficultés proviennent d'une mauvaise compréhension de la théorie de la première.
OriginalL'auteur Mythandros | 2010-06-07
Vous devez vous connecter pour publier un commentaire.
Depuis le
JSESSIONID
cookie est géré par la servletcontainer, ce paramètre est servletcontainer spécifiques. Il est difficile de savoir lequel vous utilisez, voici donc Apache Tomcat 6.0 réponse ciblée, de sorte que vous savez dans quelle direction vous aurez à regarder pour votre servletcontainer: vous devez définir leuseHttpOnly
attribut de la webapplication de<Context>
élément detrue
.Aussi voir ce La documentation de Tomcat sur le
<Context>
élément.JBoss est un serveur d'application. Il utilise Tomcat en tant que conteneur de servlet et ajoute quelques EJB et autres fantaisies JavaEE fonctionnalités sur le dessus de cela. Les EJB histoire n'est pas pertinent ici. C'est un HTTP/Servlet question. En passant, je ne suis pas sûr si l'ancien JBoss 4.0 prend en charge cet attribut... Au moins, les instructions sont les mêmes que pour Tomcat.
Il ressemble même pas JBoss 4.3 prend en charge cela, vous aurez besoin 5.0: issues.jboss.org/browse/JBPAPP-3088
OriginalL'auteur BalusC
Vous pouvez l'utiliser avec Java EE 5:
Pour Java Enterprise Edition, versions antérieures de Java EE 6 est une commune de la solution de contournement consiste à remplacer le SET-COOKIE-tête de réponse http avec un cookie de session de la valeur explicitement ajoute le drapeau HttpOnly:
Source : https://www.owasp.org/index.php/HttpOnly
Je l'ai tester dans un filtre à
OriginalL'auteur Stéphane Maleyrie