Administrar la edición de cookies del navegador para la aplicación web en .Net Mvc

3

Estoy desarrollando una aplicación web sensible con .net MVC y estoy guardando mis credenciales de usuario después de iniciar sesión con cookies.

El problema es que un usuario puede iniciar sesión con su nombre de usuario y contraseña. Luego, él / ella puede editar las cookies y restablecer las cookies a otro ID de usuario. Está causando un problema de seguridad. ¿Cómo podemos prevenir eso?

    
pregunta user142730 22.03.2017 - 14:58
fuente

2 respuestas

3

Utilice un valor de cookie criptográficamente seguro, de modo que la modificación del valor invalidaría la sesión. En otras palabras

cookie = cifrar (nombre de usuario, caducidad, secreto)

Donde solo tu aplicación conoce el secreto. Con eso dicho, no hagas esto tú mismo. Hay muchas maneras de hacerlo de forma segura en MVC.

    
respondido por el Steve 22.03.2017 - 15:07
fuente
0

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:

  1. 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.
  2. 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 .
  3. 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á.
  4. 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.
  5. 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.
  6. 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.

    
respondido por el NineBerry 22.03.2017 - 15:25
fuente

Lea otras preguntas en las etiquetas