2009-06-07 40 views

Respuesta

63

Puede desactivar solo los motores de búsqueda que utilizan este filtro, pero aconsejaría utilizándolo para todas las respuestas ya que es peor que solo el motor de búsqueda antipático. Expone el ID de sesión que se puede usar para ciertos exploits de seguridad (more info).

Tomcat 6 (pre 6.0.30)

Usted puede utilizar el tuckey rewrite filter.

Example config para el filtro de 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 y en adelante)

Puede utilizar disableURLRewriting en la configuración de contexto para desactivar este comportamiento.

Tomcat Tomcat 7 y 8

De Tomcat 7 onwards puede agregar lo siguiente en la configuración de sesión.

<session-config> 
    <tracking-mode>COOKIE</tracking-mode> 
</session-config> 
+6

Por qué utilizar una re-escritura cuando simplemente no puedes crear una cookie de sesión? –

+1

Consulte la fecha de esta respuesta. Tomcat 7 y la función de modo de seguimiento no estaban disponibles en 2009. Actualizado con información por versión ahora. – Pool

+0

Tomcat 6 admite el atributo 'disableURLRewriting' en el elemento Context que hace esto. Ver http://tomcat.apache.org/tomcat-6.0-doc/config/context.html –

13

Utilice un Filter en todas las direcciones URL que envuelve el response en un HttpServletResponseWrapper que simplemente devuelve la URL sin cambios desde encodeRedirectUrl, encodeRedirectURL, y encodeUrlencodeURL.

+3

El código de ejemplo está disponible aquí: http://randomcoder.com/articles/jsessionid-considered-harmful El servidor puede estar inactivo; Tuve que sacarlo de la memoria caché de Google. –

+0

Me gustó este enfoque. – vsingh

5

Presupuesto de la respuesta de la piscina:

Usted puede utilizar el filtro de Tuckey reescritura.

Puede desactivar por sólo buscar motores que utilizan este filtro, pero me consejo de usarlo para todas las respuestas como Es peor que un simple motor de búsqueda antipáticos. Expone el ID de sesión que se puede usar para ciertos exploits de seguridad (más información).

Vale la pena mencionar que esto aún permitirá el manejo de sesión basado en cookies aunque la jsessionid ya no esté visible. (tomado de su otra publicación: Can I turn off the HttpSession in web.xml?)

PS. No tengo suficiente reputación para comentar, de lo contrario, habría agregado esto a su publicación anterior como un comentario.

2

También si tiene Apache delante de Tomcat puede quitar la jsession con un filtro mod_rewrite.

Agregue lo siguiente a su configuración de apache.

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

Esto hará una redirección 301 a una página sin la jsessionid. Obviamente, esto deshabilitará por completo url jsessionid, pero esto es lo que necesitaba.

Saludos, Marcos

2

De manera predeterminada, las cookies están habilitadas en el servidor Tomcat (se puede establecer de forma explícita mediante el uso de las cookies = true en el elemento de server.xml). Habilitar cookies significa que jsessionID no se agregará a las URL, ya que la sesión se administrará mediante cookies. Sin embargo, incluso después de habilitar las cookies, jsessionID's se anexan a la URL para la primera solicitud ya que el servidor web no sabe en ese momento si las cookies se han habilitado. Para eliminar tales jsessionIDs, puede usar reglas de reescritura Tuckey:

Puede encontrar más información sobre esto en 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> 

Puede encontrar más información sobre esto en http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.html

+0

Tenga en cuenta que el navegador web aún necesita tener habilitadas las cookies. – BalusC

19

Es posible hacer esto en Tomcat 6.0 con: disableURLRewriting

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

p.

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

Dentro Tomcat 7.0, esto se controla con la siguiente dentro de una aplicación: ServletContext.setSessionTrackingModes()

Tomcat 7.0 sigue el Servlet 3.0 especificaciones.

51
<session-config> 
    <tracking-mode>COOKIE</tracking-mode> 
</session-config> 

Tomcat Tomcat 7 y 8 de soporte de la configuración anterior en su web.xml web-app, que desactiva las sesiones basadas en URL.

+3

No olvides usar web-app_3.0 xsd: koppor

4

En Tomcat 6.0 puede usar disableURLRewriting = "true" en context.xml desde su ruta/config de su instalación de tomcat.

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

archivo 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> 

...

Ahora salida de Tomcat es el motor de búsqueda ...

Disfruta

Cuestiones relacionadas