¿Cómo implementar sesiones de usuario seguras utilizando cookies de HttpOnly?

1

Estoy creando una aplicación web y quiero permitir que los usuarios inicien sesión (y mantengan sesión). Mi plan para apoyar esto de forma segura es el siguiente:

  • El usuario inicia sesión desde un formulario de inicio de sesión: cuando tiene éxito, el servidor responde con una cookie secure y HttpOnly que simplemente contiene su nombre de usuario.
  • Cuando el usuario cierra su navegador y luego regresa, se envía una solicitud (que incluye la cookie) a un punto final en el servidor después de cargar la página que pregunta al servidor si el usuario actual está conectado, que El servidor lo determina por la presencia de la cookie. Si es así, el servidor devuelve el valor de la cookie, que el lado del cliente puede mostrar en la interfaz de usuario como el nombre de usuario del usuario.

  • Cualquier solicitud que requiera un usuario autenticado (como guardar o actualizar datos) lo hará con el nombre del nombre de usuario especificado en la cookie en cada solicitud dada.

Una pregunta importante que tengo: si alguien ingresa a su navegador y cambia manualmente la cookie username usando devtools, ¿esto le permitiría realizar solicitudes bajo la apariencia de otro usuario de la forma en que lo he establecido? ¿O HttpOnly previene esto?

¿Estoy complicando esto? ¿Gano algo haciendo esta cookie HttpOnly , ya que esencialmente estoy permitiendo que el lado del cliente la lea de todos modos? ¿Mi enfoque es seguro?

    
pregunta Tylerlee12 04.12.2018 - 18:35
fuente

2 respuestas

1
  • el indicador secure garantiza que la cookie solo se envíe a través de https, no en texto plano, consulte OWASP SeucreFlag
  • con el conjunto de atributos httpOnly , una cookie no puede ser modificada por javascript del lado del cliente, consulte OWASP HttpOnly

Ahora a tu pregunta:

  

si alguien ingresa a su navegador y cambia manualmente la cookie de nombre de usuario usando devtools, ¿esto le permitiría realizar solicitudes bajo la apariencia de otro usuario de la forma en que lo he establecido? ¿O HttpOnly evita esto?

No httpOnly no impide el escenario descrito en su pregunta. Alguien que tenga acceso al navegador puede modificar la cookie, porque en este caso no se necesita un script para modificar la cookie.

  

Cualquier solicitud que requiera un usuario autenticado (como guardar o actualizar datos) lo hará con el nombre del nombre de usuario especificado en la cookie en cada solicitud dada.

Sería mejor establecer un random sessionId (session token) , algo que es más difícil de adivinar que un username . Esto evitaría el ataque de suplantación descrito (adivinar un nombre de usuario). Para obtener más información sobre la gestión de sesiones, consulte OWASP Session Management

    
respondido por el phl 04.12.2018 - 21:06
fuente
1

No, tu enfoque definitivamente no es seguro.

HttpOnly está diseñado para evitar que Javascript malicioso acceda a la cookie. Un usuario malintencionado con acceso al navegador (incluido el propio usuario) puede hacer lo que quiera con las cookies, o incluso ignorarlas y crear sus propias cookies para enviarlas junto con la solicitud.

Si desea mantener algo cerca de su diseño actual, le sugeriría que encripte o firme el contenido de la cookie para que sea resistente a la manipulación. Otra opción es simplemente almacenar un identificador de sesión en la cookie (con suficiente entropía) y almacenar el ID de usuario en el estado de la sesión en el lado del servidor.

    
respondido por el John Wu 04.12.2018 - 20:53
fuente

Lea otras preguntas en las etiquetas