El problema aquí es el siguiente:
El usuario A inicia sesión. Crea un valor de cookie para representar ese inicio de sesión del usuario A y envía este valor de cookie al navegador del usuario A donde se almacenará.
Quien sabe el valor de esa cookie puede decirse que es el usuario A. Esto no es un error, sino una característica, porque el propósito de tener la cookie es que el usuario pueda identificarse él mismo haciendo que el navegador envíe la cookie. al servidor junto con todas las solicitudes.
Lo que debe asegurarse es que ninguna otra persona tenga la oportunidad de leer el valor de la cookie. Hay varias cosas que debe hacer para reducir la posibilidad de que otras personas adquieran el valor de cookie del usuario A:
- Solo permita que su sitio se use a través de https. Redirigir a la versión https cuando un usuario intenta acceder a la versión http de una página. Esto evita que los atacantes lean el valor de la cookie en el cable durante la transferencia.
- Establezca los atributos
HTTPONLY
y SECURE
de la cookie. HTTPONLY
evita que el código javascript lea el valor de la cookie. SECURE
evita que el navegador envíe la cookie cuando el usuario intenta acceder a la versión http de una página. Puedes habilitar estos atributos en ASP.net configurando los atributos httpOnlyCookies
y requireSSL
en el archivo web.config
.
- Indique al navegador que elimine la cookie cuando el usuario cierre la sesión manualmente. Si está utilizando la autenticación de formularios,
FormsAuthentication.SignOut()
ya lo hará.
- Si tiene un sitio con datos muy sensibles, use javascript para implementar un cierre de sesión automático después de un cierto tiempo de inactividad del usuario, y también le dice al navegador que elimine la cookie.
- Use una cookie sin el atributo
expires
, para que el navegador no la almacene en el disco y el navegador la elimine automáticamente cuando finaliza la sesión del navegador.
- Eduque a sus usuarios para que cierren la sesión manualmente desde su sitio antes de abandonar el sitio, cuando están en una computadora que no es la suya. (De hecho, eduque a sus usuarios para que no inicien sesión en su sitio desde computadoras en las que no confían).
De su pregunta no queda claro cómo genera el valor de la cookie. Como Steve ha escrito, el contenido de la cookie debe cifrarse de manera que el usuario no pueda modificar el valor de la cookie, intercambiando la identificación del usuario y aún teniendo un contenido de cookie válido. Si está utilizando la autenticación de formularios en asp.net, esto sucede automáticamente, la cookie se cifra con una clave de máquina almacenada en su servidor (por ejemplo, en IIS).
Si tiene varias aplicaciones ejecutándose en el mismo servidor, asegúrese de que cada aplicación use su propio conjunto de claves de máquina, de modo que un atacante no pueda usar la cookie generada por una aplicación para iniciar sesión en otra aplicación en el mismo servidor.