Diferencias entre la Variable de Cookie y la Sesión a los datos confidenciales

2

Estoy haciendo mi propio sistema de autenticación de inicio de sesión, y quiero hacer un sistema robusto. Quiero decidir qué dirección debo tomar para mantener al usuario conectado. He hecho una pregunta para cada forma y también cuáles son los pros / contras.

Cookie

  1. ¿Qué tan seguro es almacenar un objeto "Usuario", con muchas propiedades (incluido el pase cifrado) en una cadena base64?

Desventaja : debe estar encriptada para que el usuario no pueda manipular fácilmente los datos. Ventaja : se puede configurar por períodos de tiempo más largos y puede persistir durante las sesiones .

Variable de sesión

  1. ¿Qué tan seguro es almacenar datos confidenciales de texto sin formato?

Desventaja : solo dura la sesión del servidor.
Ventajas : la cookie se encripta automáticamente y es más fácil de codificar que las cookies.

¿Cuáles son otras ventajas y desventajas?

    
pregunta Dillinger 17.09.2015 - 17:51
fuente

2 respuestas

2
  

1) ¿Qué tan seguro es almacenar un objeto "Usuario", con muchas propiedades (incluido un pase cifrado) en una cadena base64?

Nunca debes guardar la contraseña en ningún lugar. No importa si está encriptado o no. Ni siquiera debe almacenar una copia encriptada en el lado del servidor. Debe usar algo como bcrypt para crear un hash seguro de la contraseña que usa para la validación.

  

2) ¿Qué tan seguro es almacenar datos confidenciales de texto sin formato?

Una mejor pregunta sería "¿qué tan inseguro es almacenar datos confidenciales de texto sin formato?" La respuesta es que es muy inseguro. Lo que me preocupa más que la parte del cifrado es que la pregunta me hace pensar que está planeando confiar en los datos falsificados que provienen del cliente. Nunca debes hacer esto.

Si va a almacenar la información utilizada para la autenticación en el cliente, debe hacerse de manera segura. Usted firma (por ejemplo: con un HMAC ) para asegurarse de que no haya sido manipulado. Cifras los datos para mantenerlos seguros. Y nunca almacena nada que no sea un hash de contraseña (por ejemplo: con bcrypt ) ya que son tan sensibles que incluso el cifrado no es suficiente para ellos.

Por último, te recomiendo que no utilices un sistema de autenticación personalizado para nada que no sea jugar. Incluso los sistemas de autenticación de los desarrolladores de seguridad más experimentados requieren mucha ayuda, pruebas y uso en la vida real antes de que puedan considerarse seguros.

    
respondido por el Neil Smithline 17.09.2015 - 19:02
fuente
2

Cookie: Hay varios problemas a considerar:

  • Cuanto mayor sea el contenido de las cookies, más lenta será la capacidad de respuesta del sitio desde la perspectiva del usuario
  • El almacenamiento no es seguro. Está fuera de su control. Hay numerosos ataques disponibles basados en tomar las cookies de alguien.
  • Estás entregando la contraseña cifrada a un posible atacante.
  • Dado este escenario, no puede confiar en los datos que le devuelven desde esa cookie. Ha estado en la naturaleza. No ha proporcionado ninguna forma de saber si ha sido alterado, robado o extendido. Es una excelente manera para que un atacante aumente los privilegios, por ejemplo.

Variable de sesión:

  • No es seguro almacenar datos de texto sin formato. En un servidor compartido, los datos de la sesión están disponibles para todos los procesos.
  • Es fácil suponer que algo almacenado en el servidor es seguro, pero hay demasiados ejemplos que muestran que es una mala suposición.

¿Hay otras ventajas o desventajas?

Sí, hay MUCHAS vulnerabilidades incorporadas en su enfoque sugerido. Esto no es crítica. Considera no reinventar la rueda aquí. En el ámbito de la seguridad, utilice un sistema de confianza. ¡He aprendido esto de la manera más difícil!

    
respondido por el Edward Barnard 17.09.2015 - 19:02
fuente

Lea otras preguntas en las etiquetas