domingo, 27 de noviembre de 2011

Más sobre el jsessionid

Curioseando los estats de este blog, me percato que existen muchos accesos en base a la búsqueda del término "jsessionid". Intuyo que casi todos ellos originados por el post  "Agregando el jsessionid a un HTML estático" que, debo decir en mi defensa, fue escrito hace algunos años y en condiciones de estrés considerables.

Así que me tomé la libertad de crear este otro post aclarando, qué es el jsessionid, y algunas particularidades sobre él.

El jsessionid es, como el nombre indica, un identificador de la sesión en un contenedor Java (generalmente J2EE / Java EE). O un Servidor de Aplicaciones. Y pues generalmente se almacena en una cookie, aunque claro, existen ambientes donde no tenemos cookies.
Por partes. El jsessionid se crea generalmente bajo 2 condiciones:



  1. Cuando se intenta acceder al objeto HttpSession del HttpRequest (salvo que se pase "false" como parámetro)
  2. Cuando se entra a una JSP, salvo que se ponga el tag <%@ page session="false" %>
Ahora bien, el jsessionid tiene otras características interesantes:
  1. Es único para una aplicación en un momento determinado
  2. Se puede invalidar/cancelar
  3. Es la llave que te permite acceder a los objetos almacenados en la sesión
  4. Se crea y accede en un scope del contexto o webapp
Es decir, no puedes compartir la sesión entre varias web applications (al menos no Out of the Box, hasta donde conozco). 

Otra característica es que no es del todo buena bestia en lo que respecta a seguridad. Por naturaleza, en caso de no poder almacenarse en cookies, se pone como parte de la URL. Se agrega al final precedido por un ";". Esto es un riesgo tremendamente feo a la hora de compartir vínculos.

Por si lo anterior fuera poco, incluso almacenándose como cookie, es suceptible a hijacking/sidejacking de sesión salvo que se use HTTPS (bueno, aún usando HTTPS, pero para leer más al respecto igual y deberías clavarte un rato en OWASP). Así que, salvo que estés 100% seguro de que tus datos no son super importantes... Pues tal vez tengas que pensar en otras alternativas de seguridad para mantener la referencia a la sesión (el link anterior tiene buenos recursos para que seas creativo a ese respecto).

Espero que esta serie de aclaraciones le sirvan a alguien.

Posts relacionados