New question

Question:

Date: 17-09-2020 18:57:39 (In Spanish)

Es un error de seguridad guardar en Cookie el email y la pass ?[Resolved]

Hola amigos.
Me gustaría saber si es un error de seguridad guardar el email y la password del usuario en la Cookie para mantener su sesión iniciada en la plataforma.

Hasta donde mi logica me dice, es un error guardar el ID del usuario para mantener la sesión recordada, porque el usuario podría reescribir el valor de la Cookie y de esa forma podría entrar a la cuenta de otra persona tan solo colocando el ID del usuario y lo mismo podría pasar si colocas en la condición solo el email.

Pero mi pregunta es si guardando el email y la pass en una Cookie y luego ejecutar un script en PHP para siempre tener la sesión iniciada, seria un error de seguridad o simplemente no. Debo recordar que la password esta encriptada en la Cookie.

Por favor déjenme saber su opinión del tema, un cordial saludo.
Tags: $_COOKIE - COOKIES - PHP Votes: 0 - Answers: 7 - Views: 10 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 18-09-2020 08:57:54 Si bien es factible hacerlo, hay algunos puntos en contra:
    - Cada vez que se hace una solicitud al servidor, se envía la cookie, Encriptar claves es un proceso que consume recursos y tiempo (para evitar ataques de fuerza bruta). Chequear una clave con cada solicitud al servidor es un gasto innecesario de recursos.
    - Las cookies pueden ser vulnerables a ataques XSS. Que te roben tu clave es peor que te roben el ID de sesión, pues las claves no se cambian tan frecuentemente y tienden a ser reutilizadas en varios sitios.
    - Las sesiones no pueden invalidiarse fácilmente pues se requeriría cambiar la clave.
    - Son completamente incompatibles con sistemas de tipo SSO (Single-sign-on: https://es.wikipedia.org/wiki/Single_Sign-On
    - Y, por ultimo, almacenar el hash del password no es mejor. Se resuelve el problema de los recursos pero potencialmente se está entregando el hash para un ataque de fuerza bruta, no pueden invalidarse las sesiones y ni siquiera pueden diferenciarse en el caso de un usuario con multiples sesiones abiertas.
    - Si un atacante se apropia del cookie que contiene el hash, tendrá acceso al servidor mientras no se cambie la clave, lo cual potencialmente puede ser un largo tiempo.

    Saludos,
      Votes: 3 - Link answer
     
  • Date: 18-09-2020 11:11:21 Hola Juan, entiendo tu respuesta de los puntos encontra.
    Pero me gustaría saber si hacerlo de esta forma tiene puntos a favor y cuales son estos puntos.

    Además es bueno comentar que mis usuarios se estaban quejando ya que tenían que loguearse cada vez visitan el sitio y hay que tomar en cuenta que de todas formas ellos se logueran y eso es una petición, solamente que de la manera en que lo estoy haciendo el logueo se hace automáticamente al visitar la pagina y no manualmente por el usuario que es un poco molesto y es una mala experiencia de usuario.

    Por otra parte, yo entiendo que estoy mostrando un hash al usuario con su contraseña que el mismo usuario ha elegido y que además no creo que mismo usuario intente descifrar la password que el mismo a introducido, recuerda que descifrar un hash puedo incluso tomar años, y hasta décadas.

    Por el consumo de recurso no me preocupa mucho, debido a que estoy usando un hosting ilimitado, pero de todas maneras no dudo en que en un futuro tenga problemas y me obliguen a utilizar un VPS, pero no cuento con el suficiente trafico ni usuarios para eso aun.
      Votes: 0 - Link answer
     
  • Date: 19-09-2020 06:32:33 Como todo, son recomendaciones, no reglas inquebrantables. ¿Es malo? Depende. ¿Es bueno? Depende... O sea, ni si, ni no, sino todo lo contrario...
    Si en tu caso específico evalúas todos los pros y contras estas tomando una decisión fundamentada. Se trata de que entiendas las bases para tomar esa decisión y no lo hagas a la ligera. Si consideras que es conveniente para ti (y tus usuarios) y que los contras son mínimos o no son relevantes, hazlo.
      Votes: 1 - Link answer
     
  • Date: 20-09-2020 13:28:19 Hacer pública la contraseña o el hash de la misma es mala práctica de programación y no se aconseja hacerlo. Los hash son sumamente vulnerables a ataques de fuerza bruta, hacerlos públicos a través de una cookie es lo peor que puedes hacer en materia de seguridad.

    Un atacante puede tardar años en vulnerar una contraseña si para empezar ni siquiera conoce qué tipo de cifrado estás usando. Si facilitas el hash entonces le estás dando todo lo que necesita para vulnerar tu sistema en tiempo récord.

    Las contraseñas y los hash son las joyas de la corona en lo que a autenticación se refiere. El usuario es el único que debe conocer su contraseña y el sistema debe ser el único que conoce y almacena un hash.

    El problema del que están quejándose tus usuarios muy probablemente se deba a una configuración o una mala implementación de manejo de sesión.

    Revisa tu sistema y configuraciones e identifica exactamente qué está afectando la experiencia de tus usuarios. Hay muchísimas maneras de mitigar el problema pero poner el hash o contraseña en una cookie no es la solución adecuada.
      Votes: 2 - Link answer
     
  • Date: 20-09-2020 16:32:45 Hola Hernesto,
    La verdad es que no estoy contento de guardar el email y el hash de la contraseña en una Cookie pero es que no tenia mas remedio, no encontré otra logica con la cual trabajar. Muchos usuario se me estaban quejando porque tenían que inicial sesión siempre que visitaban el sitio y desde hace mucho tiempo en este foro y en otros foros buscaba la manera correcta para mantener la sesión iniciada del usuario y no tenia suerte en encontrar la cereza del pastel.

    Hasta ahora esta es la forma en la que he logrado mantener la sesión iniciada del usuario, ya pensare y buscare una manera mas correcta para hacer eso, pero por el momento esto es lo mejor que puedo hacer.
      Votes: 0 - Link answer
     
  • Date: 21-09-2020 09:19:16 Hola Braylin,
    Si lo que quieres extender es la vida de la sesión entonces hay una configuración para eso pero tienes que estar seguro de lo que están haciendo tus usuarios. Te puedo proporcionar un caso donde no importa lo que hagas tu sitio SIEMPRE me pedirá que proporcione mis credenciales de nuevo.

    En el escenario que manejas tu sitio podría ser el responsable legal en caso de que las credenciales se vulneren en otro sitio por el mal manejo de seguridad que llevas.

    Mi petición es que por favor no hagas esto, es una mala prática y es parte del por qué se considera a PHP inseguro porque los programadores resuelven cosas de la peor manera.

    Busca otra manera de resolverlo. Lo mejor es que pudieras subir tu código a un repositorio y dejar que otros lo examinen. Otra cosa es que utilices algún framework pues seguramente tu problema ya ha sido resuelto ahí.

    En fin es todo lo que puedo hacer para evitarte un trago amargo en el futuro.

    Saludos
      Votes: 1 - Link answer
     
  • Date: 28-10-2020 18:18:04 Hola Braylin
    En principio estoy totalmente de acuerdo lo que mencionan los compañeros en no guardar en sesiones o en cookies datos sensibles o comprometedores del usuario por ejemplo password, mail, etc.

    Es verdad que existen numerables sitios que ofrecen la posibilidad de mantenerse logueado con el típico checkbox, [ ] Recordarme, lo hace por ejemplo sitios famosos como Facebook, Google y hasta esta misma comunidad. De todas maneras la cookie tiene cierto tiempo de vida por ejemplo un mes o el tiempo que se le quiera dar. al expirarse la cookie hay que loguearse nuevamente. Desconozco la técnica que ellos utilizan para realizarlo de una manera segura.

    Se me ocurre que una manera de hacerlo que tal vez habría que evaluarlo bien y es la siguiente

    Generar un token único (irrepetible) para cada usuario que marque Recordarme, por ejemplo una cadena generada como token seria "78dcdd6ec74cb3c56206bc6230d77f724d13270e6bfb85b7ee0aa623" el cual se almacene en la cookie y en la base de datos en un registro asociado al usuario, por ejemplo en un campo llamado tokenCookie.

    Si la session esta expirada, intentar recuperar la cookie y su valor que es el token el cual hay que verificarlo con el que esta almacenado en la base de datos, si son iguales se loguea al usuario en la session sino enviarlo al formulario de login.

    Código de ejemplo para generar un Token Único.
    <?php
    $hash_algoritmo= 'sha224';
    $token = hash($hash_algoritmo,uniqid());
    echo $token;
    //devuelve: a449194a125053a6ba1e6d59eb140f883ade58a13dd6aa51235a6dab
    


    En $hash_algoritmo podes utilizar el algoritmo que desees leer hash_algos. leer hash(), leer uniqid()
    En vez de usar uniqid() podes utilizar microtime()


    Cada vez que se ejecute el codigo devuelve una cadena de caracteres distinta lo cual lo haría casi único.
    Si deseas asegurarte que el token generado es único podes chequear que no este registrado en la base de datos antes de crear la cookie con el valor del token, si llegase a existir generar un nuevo token y comprobarlo nuevamente, repetir este ciclo hasta no hallar un token igual.
    .
    También podría ser bueno que cada cierto tiempo renovar el token.
    Eliminar de la base de datos tokens que ya no son validos porque ha expirado la cookie por el tiempo de vida que se le ha asignado.

    Habría varias maneras de crear estos tipos de Token como los que se utilizan en ciertos formularios en algunas ocasiones para evitar ataques CSRF.

    Espero que se haya entendido mi planteo.

    Saludos y buen código
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In