Estoy trabajando en un proyecto web que se conectará a una base de datos. Para eso, tendré que almacenar el inicio de sesión / contraseña de ese usuario de la base de datos en forma clara (cifrada de manera simétrica) para poder volver a conectar cada acción (como crear una tabla, agregar entradas, etc.) sin tener que para solicitar esas credenciales cada vez.
Soy consciente de que almacenar la contraseña de forma clara es demasiado inseguro y está fuera de mis posibilidades.
Esto es lo que pensé, ¿podría decirme si sería correcto o si existe una posibilidad mejor? gracias :)
La aplicación se dividirá en dos partes independientes: el frontend y el backend.
Cuando el usuario inicie sesión a través de la interfaz, el inicio de sesión y la contraseña se enviarán sin cifrar (recomendaré el uso de HTTPS). El backend intentará conectarse a la base de datos, si tiene éxito, cifrará el inicio de sesión y la contraseña con Blowfish y los devolverá a la interfaz.
Para cualquier solicitud posterior, la interfaz tendrá que enviar el nombre de usuario / contraseña encriptado, sin saber nunca el claro, solo el cifrado.
Si alguien tiene acceso a los datos de este usuario (por ejemplo, XSS), solo podrá acceder a las credenciales cifradas, no a la clara.
Si un atacante puede hacer un MITM, solo el inicio de sesión inicial es riesgoso, todas las siguientes solicitudes serán con las credenciales cifradas.
Pensé en usar cookies / sesión, pero es lo mismo: los valores se almacenan en claro o codificados en base64. No es realmente seguro!
La idea de Blowfish proviene de cómo PhpMyAdmin lo usa (también conocido como el mismo). Además, incluso en PhpMyAdmin, la parte de inicio de sesión también se envía de forma clara.
¿Crees que mi implementación es correcta o tienes algo mejor que sugerir? Realmente me gustaría hacer algo lo más seguro posible. Hasta ahora, solo la parte de inicio de sesión me molesta: /
Gracias por tus ideas.
EDIT:
Aparentemente, mi pregunta no es lo suficientemente clara, voy a tratar de ser más explícita :
Quiero construir una alternativa a PhpMyAdmin. PhpMyAdmin es un middleware que se conecta a un servidor MySQL proporcionando el nombre de usuario / contraseña de cualquier usuario en esa base de datos. Las credenciales solicitadas en el formulario web son las que se utilizan para la base de datos MySQL.
Por lo tanto, durante toda la sesión después de que el usuario haya iniciado sesión correctamente, PhpMyAdmin almacena el inicio de sesión / contraseña en la sesión mediante el cifrado de la contraseña con Blowfish.
Esto NO PUEDE evitarse, porque cada vez que el usuario realiza una solicitud (como crear una tabla, insertar datos, actualizar o eliminar datos), PhpMyAdmin NECESITA volver a conectarse a esa base de datos utilizando las credenciales proporcionadas al iniciar sesión, y luego realice la acción que el usuario solicitó.
Por lo tanto, no es posible para PhpMyAdmin almacenar solo un hash de las credenciales, ya que no podrá volver a conectarse a la base de datos durante las solicitudes posteriores realizadas por ese mismo usuario.
Soy consciente de que almacenar la contraseña que se puede recuperar sin ningún problema es no es una buena solución , y esa es la razón de esta pregunta: no me lo dice el hashing es mejor, porque es absolutamente inútil en mi caso, pero para saber si hay una mejor alternativa que el cifrado simétrico + HTTPS para mantener una contraseña que se necesita para cada acción que realiza el usuario.