Estoy desarrollando una aplicación web, que realiza llamadas HTTP siempre y cuando el usuario no haya iniciado sesión.
Una vez que el usuario hace clic en el botón iniciar sesión , se le envía a una "página de inicio de sesión" que es HTTPS.
El inicio de sesión realiza una llamada Ajax a un servlet, donde se agregan algunos atributos específicos a la sesión.
Luego, para resolver el problema de "fijación de sesión" , la sesión actual se invalida y se crea una nueva sesión.
Después de iniciar sesión, el usuario es redirigido a la página de la aplicación pero utilizando HTTP.
Ahora para no perder los atributos de la sesión (entre HTTPS y HTTP) anulé el mecanismo predeterminado Glassfish almacenando en caché la cookie JSESSIONID y enviándola en respuesta: ( esta es una aplicación j2ee)
Cookie cookie = new Cookie("JSESSIONID", request.getSession().getId());
cookie.setMaxAge(-1);
cookie.setSecure(false);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
Funciona bien, pero he estado leyendo sobre Desbordamiento de pila, Seguridad de TI y, en general, en línea que la sesión aún podría ser secuestrada. Por ejemplo, esta respuesta menciona que es una muy mala idea, y que un hombre en el medio puede secuestrarla.
No soy un experto en seguridad, pero me gustaría recibir sus comentarios sobre el siguiente mecanismo que construí:
- Al escribir la URL de la aplicación web, la primera página de destino es HTTP. Todos los mecanismos son HTTP.
- Cuando el usuario decide "iniciar sesión", se le redirige a una página, y esa página de "aterrizaje" es HTTPS (aplicada a través de j2ee CONFIDENCIAL restricción de seguridad)
- En el servlet, la reparación de la sesión se realiza mediante la invalidación de la sesión y la creación de una nueva. Luego se agregan los atributos de la sesión.
- Para no perder los atributos de la sesión mientras regresa a HTTP, una cookie se reemplaza manualmente con el mismo "ID de sesión" y se establece en "no segura".
- Todas las solicitudes de aplicaciones son de nuevo HTTP.
¿Sigue siendo este un objetivo fácil para el secuestro de sesiones / MITM / o cualquier otra falla de seguridad?
Agradecería sus comentarios, ya que no tengo mucha experiencia con los detalles de seguridad.