Almacenamiento de contraseñas de servicios de terceros (aplicación web)

4

Tengo una aplicación web que incluye sitios web de terceros en iframes. Los sitios web de terceros requieren que el usuario inicie sesión en ellos. La opción A es requerir que el usuario inicie sesión en cada sitio web de forma individual a través de iframes y confíe en las cookies para recordar al usuario. Sin embargo, eso es bastante incómodo y algunos usuarios definitivamente preferirían un inicio de sesión para todos los sitios web, así que esa es mi opción B:

Se basa casi totalmente en la seguridad y el cifrado de la interfaz.

Primero, almacenando la contraseña. Cada usuario tiene una contraseña (contraseña principal) para mi aplicación web. La contraseña, además de ser utilizada para iniciar sesión en mi sitio web, también se usaría para cifrar las credenciales de los usuarios de los sitios web de los usuarios. Por lo tanto, las credenciales se cifran con la contraseña principal de mi servidor y solo el usuario puede descifrarlas. Aquí es donde tengo una pregunta, ¿necesitaría simplemente cifrarla usando solo la contraseña, o algunas claves secretas mágicas o algunas cosas podrían usarse para fortalecer el cifrado?

Proceso general:

  • El usuario inicia sesión en mi aplicación web.
  • La contraseña principal se almacena en la memoria del navegador para un uso posterior
  • Extraer credenciales cifradas del servidor y descifrarlas en el frontend, usando la contraseña principal

  • las credenciales desencriptadas se almacenan en la memoria del navegador

  • abra el iframe de inicio de sesión y envíe las credenciales mediante postMessage al inicio de sesión iframe (incluye validación de origen)

  • iniciar sesión automáticamente (tengo un complemento de integración para los sitios, eso es por qué podría hacerlo).

Tenga en cuenta que iniciar sesión en la aplicación web y descifrar las credenciales son 2 procesos diferentes. Si el usuario actualiza el sitio web, aún está conectado, no puede acceder a las credenciales. Se le pedirá la contraseña de nuevo. Eso no es un problema, ya que la sesión de sitios web de terceros será recordada por el navegador de todos modos.

Por lo tanto, los datos del frontend estarían protegidos de iframes por la seguridad web y siempre que me asegure de que no haya sumideros XSS en la aplicación web, no hay forma de que estas contraseñas estén filtrándose, ¿verdad? Incluso si el servidor estaba comprometido.

La única forma en que lo veo, si el servidor se vio comprometido y alguien editó el código de la interfaz para que sea malicioso y capture las contraseñas. Pero eso es algo que siempre sería peligroso, incluso si no implementara el inicio de sesión automático en absoluto.

Solo quiero tu opinión si es una forma segura de almacenar y usar contraseñas y lo que podría salir mal. Especialmente, ¿es seguro almacenar contraseñas en la memoria de javascript y cómo cifrar las credenciales? Use solo la contraseña del usuario o tal vez agregue un token secreto a esa contraseña (no sé si eso tiene sentido). Cualquier cosa que lo haga más seguro. Cualquier ayuda apreciada.

    
pregunta Maciej Krawczyk 03.03.2017 - 18:26
fuente

2 respuestas

2

La mejor manera de hacerlo sería a través de oAuth. Consulte la documentación en los sitios web para ver si esa es una opción viable. Si no es así, definitivamente no se recomienda almacenar las credenciales de los usuarios de ninguna forma en un servidor web, un navegador o cualquier otra cosa. Normalmente, cuando valida un inicio de sesión, está validando que el hash (más un salt) de la contraseña coincide con lo que hay en la base de datos. La contraseña nunca se almacena realmente en la base de datos, ni siquiera en forma cifrada. En este escenario, no hay forma de que un atacante sepa cuál es la contraseña para el usuario, incluso si es capaz de comprometer la base de datos (salvo un ataque de fuerza bruta).

    
respondido por el MikeSchem 03.03.2017 - 18:49
fuente
2

Si entiendo su pregunta correctamente, desea presentarse como un intermediario de confianza, que almacenará SUS inicios de sesión en SU servidor.

Incluso si esto es técnicamente posible sin que aparezcan avisos y advertencias en todo el lugar, le será difícil convencer a los usuarios para que confíen ciegamente en sus contraseñas. Porque, cuando inicies sesión, manejarás sus contraseñas en texto sin formato. Las personificarás . En serio, ¡MALA idea!

Por lo tanto, a menos que exista un acuerdo legal integral en el que se confíe de manera inherente a USTED para manejar las contraseñas, le recomendaría que no lo haga solo debido a problemas legales.

Técnicamente, siempre es una mala idea almacenar las contraseñas, incluso si están cifradas, y es aún peor la idea de usar esas contraseñas para registrar a los usuarios solo por conveniencia.

Supongo que no tienes control sobre esos otros sitios, porque entonces tal vez podrías establecer la confianza de alguna otra manera, no mezclando las contraseñas.

    
respondido por el xmp125a 03.03.2017 - 18:57
fuente

Lea otras preguntas en las etiquetas