web-dev-qa-db-fra.com

Est-il possible de désactiver jsessionid dans le servlet Tomcat?

Est-il possible de désactiver jsessionid dans l'url de tomcat? le jsessionid ne semble pas trop convivial pour les moteurs de recherche.

67
Roy Chan

Vous pouvez désactiver uniquement les moteurs de recherche à l'aide de ce filtre, mais je conseillerais de l'utiliser pour toutes les réponses car c'est pire que simplement un moteur de recherche hostile. Il expose l'ID de session qui peut être utilisé pour certains exploits de sécurité ( plus d'informations ).

Tomcat 6 (avant 6.0.30)

Vous pouvez utiliser le filtre de réécriture Tuckey .

Exemple de configuration pour le filtre Tuckey:

<outbound-rule encodefirst="true">
  <name>Strip URL Session ID's</name>
  <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
  <to>$1$2$3</to>
</outbound-rule>

Tomcat 6 (6.0.30 et versions ultérieures)

Vous pouvez utiliser disableURLRewriting dans la configuration de contexte pour désactiver ce comportement.

Tomcat 7 et Tomcat 8

De à partir de Tomcat 7 vous pouvez ajouter ce qui suit dans la configuration de la session.

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
67
Pool
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat 7 et Tomcat 8 prennent en charge la configuration ci-dessus dans votre application web web.xml, qui désactive les sessions basées sur URL.

50
Spektr

Il est possible de le faire dans Tomcat 6.0 avec: disableURLRewriting

http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html

par exemple.

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>

Dans Tomcat 7.0, cela est contrôlé avec les éléments suivants dans une application: ServletContext.setSessionTrackingModes ()

Tomcat 7.0 suit les spécifications de Servlet 3.0.

19
Doug

Utilisez un Filter sur toutes les URL qui encapsule le response dans un HttpServletResponseWrapper qui renvoie simplement l'URL inchangée de encodeRedirectUrl, encodeRedirectURL, encodeUrl et encodeURL.

13
Andrew Duffy

Citation de la réponse de Pool:

Vous pouvez utiliser le filtre de réécriture Tuckey.

Vous pouvez désactiver uniquement les moteurs de recherche à l'aide de ce filtre, mais je vous conseille de l'utiliser pour toutes les réponses, car il est pire que le simple moteur de recherche hostile. Il expose l'ID de session qui peut être utilisé pour certains exploits de sécurité (plus d'informations).

Il convient de mentionner que cela permettra toujours la gestion de session basée sur les cookies même si le jsessionid n'est plus visible. (extrait de son autre article: Puis-je désactiver la HttpSession dans web.xml? )

PS. Je n'ai pas assez de réputation pour commenter, sinon j'aurais ajouté ceci à son post ci-dessus en tant que commentaire.

5
Andreas

Dans Tomcat 6.0, vous pouvez utiliser disableURLRewriting = "true" dans context.xml à partir du chemin/config de votre installation Tomcat.

http://Tomcat.Apache.org/Tomcat-6.0-doc/config/context.html

fichier context.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.Apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context disableURLRewriting="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.Apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>

...

Maintenant, Tomcat est compatible avec les moteurs de recherche ...

Prendre plaisir

4
myset

Par défaut, les cookies sont activés dans le serveur Tomcat (vous pouvez le définir explicitement en utilisant cookies = true dans l'élément de server.xml). L'activation des cookies signifie que jsessionID ne sera pas ajouté aux URL car la session sera gérée à l'aide de cookies. Cependant, même après l'activation des cookies, les jsessionID sont ajoutés à l'URL pour la première demande car le serveur Web ne sait pas à ce stade si les cookies ont été activés. Pour supprimer de tels jsessionID, vous pouvez utiliser les règles de réécriture de tuckey:

Vous pouvez trouver plus d'informations à ce sujet sur http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-Java.html

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITH query parameters</note>
    <from>^/(.*);jsessionid=.*[?](.*)$</from>
    <to encode="false">/$1?$2</to>
</outbound-rule>

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note>
    <from>^/(.*);jsessionid=.*[^?]$</from>
    <to encode="false">/$1</to>
</outbound-rule>

Vous pouvez trouver plus d'informations à ce sujet sur http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-Java.html

2
techwiz

De plus, si vous avez Apache devant Tomcat, vous pouvez supprimer la session avec un filtre mod_rewrite.

Ajoutez ce qui suit à votre configuration Apache.

#Fix up Tomcat jsession appending rule issue
RewriteRule  ^/(.*);jsessionid=(.*) /$1 [R=301,L]

Cela fera une redirection 301 vers une page sans le jsessionid. Évidemment, cela désactivera complètement l'url jsessionid, mais c'est ce dont j'avais besoin.

À la vôtre, Mark

2
Mark Lynch