Nueva pregunta

Pregunta:

Fecha: 27-07-2019 08:06:36 (En Español)

¿Cómo volver a la base de datos (MySQL) del usuario, utilizando sus credenciales, sin almacenarlas en $_SESSION ?[Resuelta]

He recibido consejo de evitar por seguridad guardar 'usuario' y 'contraseña' en $_SESSION, pero también abrir, usar y cerrar la conexión a la base de datos.

Siendo un requisito del sistema que cada usuario cuente con una base de datos propia, y si deseo hacer caso a los dos consejos, la pregunta es: ¿Cómo volver a la base de datos del usuario utilizando sus credenciales?

En todo caso:
1. ¿Qué problema se suscita si la conexión a la base de datos se mantiene abierta durante la vida de la sesión?
2. ¿Qué problema se suscita al almacenar 'usuario' y 'contraseña' en $_SESSION?
Etiquetas: $_SESSION - PHP MySQLi Votos: 0 - Respuestas: 8 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 27-07-2019 08:41:00 Problemas con conexiones a base de datos se mantengan abierta:
    El "buffer" se satura y llegara un momento que el servidor te regresara que no puede abrir mas conexiones.
    El servidor se podria alentar con tantas conexiones abiertas (Depende de la memoria) y peor si no se ocupan.

    Problema de usuario y contraseña en sesion:
    Vulnerabilidad, ya que esta muy propensa a que la vean rapidamente y mas, si es acceso a la base de datos (no como solo datos de una tabla, sino es el acceso a la base de datos)

    --------------------------------------------------------------------------

    Para no guardarla directamente, puedes agregar algo clave para evitar que la vean directamente, por ejemplo en base64_encode y una palabra o letras aleatorias. Ya que , queda muy vulnerable en sesion o cookies, que lo vean y sin esfuerzo tengan la informacion a la vista.

    Ejemplo sencillo de seguridad:
    Stryfe en Base 64 = U3RyeWZl
    3 Letras de seguridad aleatorias = TDV
    Unidos = TDVU3RyeWZl
    Y eso lo guardas como usuario.. y solo tu en tu codificacion sabes que debes quitarle 3 o mas o menos letras al inicio o al final para "preguntar" si es correcto.
    E igual con contraseñas.

    ----------------------------------------------------------------------------
    Recomendacion:
    Si te es posible mejor ocupa una sola base de datos, con una estructura "multi empresa" si es por eso que cada usuario tenga su "base de datos", con un campo que haga referencia a cada "empresa/usuario" y asi tambien internamente podras segmentar a gusto.
    -----------------------------------------------------------------------------

    Saludos Terricola

    Stryfe™
      Votos: 0 - Link respuesta
     
  • Fecha: 28-07-2019 02:56:17 Me parece bien la técnica de ofuscamiento pero, por tu comentario: debo pensar que $_SESSION es una vulnerabilidad de PHP, más aún no se ¿cómo puede el usuario ver el contenido de $_SESSION desde su terminal? Tengo entendido que es imposible porque es parte de PHP y esto solamente es accesible desde el servidor.

    ¿Por qué es mejor una Base de Datos multiempresa y no una base de datos para cada empresa? ¿Es por estilo de programación o por buena práctica? Decía Maquiavelo: "Divide y vencerás" y considero que con Bases de Datos independientes el mantenimiento es menos complicado, sobre todo que el usuario puede utilizar gestores de bases de datos como phpMyAdmin o similares sin problemas de seguridad para el resto de los usuarios del sistema.
      Votos: 0 - Link respuesta
     
  • Fecha: 28-07-2019 05:12:58 Verás, si todos los accesos al servidor los tienes controlados no veo que sea problema guardar usuario y contraseña en variables de sesión.

    El problema sería en aplicaciones como WordPress, donde cualquier plugin tiene acceso a esas variables.

    En cualquier caso esas técnicas de ofuscamiento no te cuesta mucho hacerlas, o usar algún método de encriptación reversible.

    Por otra parte la duración de la sesión no tiene nada que ver con la de una conexión a la BD. Creo que lo mejor es abrir y cerrar la conexión en cada petición.

    Lo de usar solo una o varias bases de datos depende del uso que le pretendes dar. No hay ningún problema en crear tantas bases de datos como usuarios.

    Si es una aplicación multiusuario lo que se hace es usar una única base de datos (con los datos de acceso en un config.php); con una tabla usuarios (donde se guarda su *nombre de usuario y clave de acceso a la aplicación web*); y en las demás tablas se crea un campo con el id del usuario al que pertenece cada fila.

    No sé si estarás confundiendo los usuarios de una aplicación web con el usuario de la base de datos.

    Salu2.
      Votos: 1 - Link respuesta
     
  • Fecha: 28-07-2019 07:56:25 Comparto 100% lo que propone Fernando García.

    El problema con tener muchas bases de datos iguales está en que la estructura de tu bbdd deberá acompañar la evolución de tu código, con lo cual, te será difícil escalar el sistema a muchas empresas.

    Simplemente piensa que el cambio que deberás hacer en una base de datos deberás reproducirlo en todas las demás... en ese sentido es mucho más conveniente tener un identificador del dueño de cada fila en tus tablas más que manejar bases de datos separadas.
      Votos: 2 - Link respuesta
     
  • Fecha: 28-07-2019 10:43:23 Superado el tema del almacenamiento de credenciales en session ya que mi servidor si bien es público, no maneja extensiones que comprometan esa variable.

    Estudiaré las respuestas en cuanto al manejo de bases de datos. No cierro aun.
      Votos: 0 - Link respuesta
     
  • Fecha: 28-07-2019 13:28:36 Hola Mauro y Víctor,

    Efectivamente en una aplicación multiusuario normal no tiene sentido usar una base de datos para cada usuario, dado que todos comparten la misma estructura de datos.

    Una instalación WordPress multiusuario lo que hace es duplicar las tablas (no la BD), añadiendo a cada tabla el sufijo de la id del sitio. Y al principio me pareció algo raro pero tiene su explicación: junto a tablas con la misma estructura los plugins pueden crear otras en cada sitio, se facilita la retrocompatibilidad y las migraciones, etc.

    Usar varias bases de datos solo tendría sentido si cada usuario puede diseñar su propia estructura, pero aún así la aplicación necesitaría de una tabla para manejar los usuarios. Un proyecto de este tipo es muy complejo y no creo que sea tu propósito.

    Salu2.
      Votos: 1 - Link respuesta
     
  • Fecha: 28-07-2019 15:14:54 Yo he creado plataformas empresariales a las cuales se conectan usuarios de varias empresas. La solución que uso es crear una tabla de empresas (cada una con su 'id') y en la tabla de usuarios asocio a cada usuario con la empresa a la cual pertenece mediante el campo 'id_empresa'. Entonces, cuando el usuario se logea, guardo una variable de sesión con el id de la empresa para utilizarla en las consultas. De esa manera cada usuario tiene acceso solamente a la información de su propia empresa.   Votos: 3 - Link respuesta
     
  • Fecha: 28-07-2019 18:36:13 Buenas ideas. En realidad lo que he implementado es un sistema multiusuario sin control de usuarios. Este lo he dejado a mysql.
    Me ha significado simplificación en la administración de la db sobre todo al momento de duplicar un registro base de la estructura relacional de toda ella. Lo tomaré en cuenta para futuras implementaciones.

    Gracias a todos.
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com