¿El ID de sesión generado después de iniciar sesión debe marcarse como no válido cuando el usuario cierra el navegador sin cerrar sesión?
¿Podría ser esto una falla de seguridad? Si es así, ¿es posible explotar esto?
Los navegadores normalmente no escuchan ningún puerto, por lo que no hay ningún puerto para enviar el SYN-ACK. El navegador a menudo también se encuentra detrás de un NAT, por lo que ni siquiera puede acceder a ningún puerto de la computadora en la que se ejecuta el navegador, excepto al responder solicitudes. Por supuesto, es posible tener una solicitud AJAX abierta o usar sockets web, pero será costoso para los requisitos del servidor.
Los navegadores eliminan las cookies de sesión cuando el navegador está cerrado, si lo cierra normalmente y no solo elimina el proceso, por lo que la sesión se pierde permanentemente en el lado del cliente cuando se cierra el navegador.
La opción normal es establecer un tiempo de sesión relativamente corto para que su servidor cierre la sesión cuando no hay actividad en el cliente. También puede configurar esto realmente corto si javascript está habilitado y enviar una solicitud de mantener viva la sesión abierta mientras el sitio esté abierto en el navegador.
Hay otros medios que puede usar para asegurar las sesiones obsoletas, la más simple es tener un oyente onBeforeUnload para enviar una solicitud de cierre de sesión cuando el visitante abandona su sitio. Por supuesto, esto también requiere que JavaScript esté habilitado en el navegador. . Otra cosa que podrías hacer es hacer un seguimiento de la huella dactilar y la IP desde el navegador y conectarlo a la sesión para que puedas probar si el navegador que tiene el SessionId no cambia.
Si tiene un sitio con requisitos de seguridad lo suficientemente altos como para que tenga que preocuparse por esto, debería preocuparse más por lo que sucede cuando el usuario navega fuera del sitio o cierra la pestaña y deja el navegador abierto
Sí, mantener la sesión válida después de que el usuario cierre su navegador es un riesgo menor. Desea mantener el tiempo que un token de sesión es válido al mínimo. Después de que el usuario cierre el navegador, ciertamente no lo va a utilizar más, por lo que no tiene sentido mantenerlo válido.
El problema es que no se le notifica cuando un usuario cierra su navegador. Una alternativa es detectar si el usuario todavía usa su aplicación. Su aplicación puede ver el tiempo entre solicitudes, y si no ha habido una solicitud en 10 o 20 minutos, se puede suponer que el usuario ha finalizado la sesión y que el token de la sesión se puede invalidar.
Sin embargo, esto significa que el usuario se desconecta cuando tiene la aplicación abierta pero no realiza solicitudes. Para resolver esto, su aplicación puede enviar solicitudes por sí misma cuando se está utilizando. Con Javascript, el cliente puede enviar una solicitud cada minuto para que el servidor sepa que la aplicación aún está en uso. De esta manera, la sesión seguirá siendo válida siempre que la aplicación web se abra en el navegador.
Lea otras preguntas en las etiquetas session-management