Cómo restablecer JSESSIONID

Se considera una buena práctica de seguridad para restablecer la cookie de sesión cuando un usuario se autentica.

Cómo hacerlo con Java?

Mi intento hasta la fecha es correcta, pero me preguntaba si hay una mejor manera:

public static HttpSession resetSessionId(HttpSession session, 
      HttpServletRequest request) {
    session.invalidate();
    session = request.getSession(true);
    return session;
}
Creo que es la mejor manera…
He tratado a su manera. Pero el JSESSIONID no reset. ¿Sabe usted sabe por qué? Estoy usando la Resina como mi contenedor web.

OriginalEl autor Bozho | 2011-01-29

4 respuestas

  1. 2

    Su respuesta parece óptimo. Otra manera sería manipular directamente cookes en esto de la moda:

     Cookie cookie = new Cookie ("JSESSIONID", "randomValue");
     cookie.setMaxAge( 0 );

    por lo que se crea una nueva cookie con el mismo nombre y de inmediato caducan, pero me no recomiendo pasando de esta forma ya que el tuyo es mucho más limpio y bastante obvio para cualquiera que esté familiarizado con basic Servlet Api.

    Voy a utilizar este, porque así me será capaz de establecer el “seguro” bandera falsa. Tomcat se ajuste a true, porque yo soy de autenticación a través de SSL
    bueno, en realidad no trabajo – de alguna manera se envió a dos idénticos JSESSIONIDs, en lugar de reemplazar el existente. Así que tuve que abandonar toda restablecer por ahora. Pero la preservación de la aceptación de respuesta, como la más completa.

    OriginalEl autor

  2. 3

    Yo sólo pasar la solicitud a partir de la cual tengo la sesión. Si una sesión no existía aún no hay ningún punto en la creación de uno solo para invalidarlo. Esto también se aplica si la sesión ha sido creada por el contenedor (debido a que el usuario primero http directamente la solicitud en el formulario de inicio de sesión).

    public static ... (HttpServletRequest request) { 
        HttpSession session = request.getSession(false);
        if (session!=null && !session.isNew()) {
            session.invalidate();
        }
    bien, una sesión que debe de existir antes de la autenticación (yo uso una de autenticación personalizada, no integrado en http auths). Cuando el usuario abre la página de inicio de sesión, se crea una sesión.
    Prefiero ser muy óptima respecto a la creación de sesión en mi webapps. Una sesión de http es explícitamente creado por el código de Java sólo cuando sea necesario. Mostrar un formulario de inicio de sesión, por lo general no requieren de ningún estado de la manipulación.
    lo cherouvim dice es muy cierto, manejo de sesiones antes de la autenticación (o cualquier otro requerido por el estado) pueden ser fácilmente explotados por OOM DoS (basta con llamar a la página de creación de la sesión, pero nunca de la tienda, es decir, la ejecución de exactamente la misma solicitud GET). Así que supongo que esta es la mejor respuesta (junto con el comentario)

    OriginalEl autor

  3. 2

    Tomcat (desde 6.0.24 AFAIK) puede cambiar el sessionId en la autenticación automáticamente mientras que usted está utilizando el estándar servlet mecanismos de autenticación (básica, la autenticación basada en formularios). Esto puede ser configurado a través de changeSessionIdOnAuthentication para el Autenticador de la Válvula: http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html

    gracias, pero yo estoy utilizando una autenticación personalizada.

    OriginalEl autor

  4. 1

    De otra manera (no la mejor) es la llamada ‘changeSessionId(existingSession)’ de org.apache.catalina.session.StandardManager que va a cambiar la ID de la sesión de la sesión actual a una nueva generado aleatoriamente IDENTIFICADOR de sesión.

    Tienes que utilizar StandardManager Mbean para invocar el método. Por favor, consulte Tomcat MBeans

    Pseudo código:

    ObjectName contextObjectName = new ObjectName(“Catalina:type=Administrador,path=/lo que sea,host=whateverhost”);

    mbeanServer.invoke(contextObjectName, “changeSessionId”, new Object[]{sesión}, new String[]{“javax.servlet.http.HttpSession”});

    OriginalEl autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *