iframe basic auth o token security

2

Tenemos dos sitios, ambos son de confianza.

En site1 almacenamos el nombre de usuario y la contraseña del usuario para site2.

Hacemos llamadas a API en el backend de site1 a site2 a través de autenticación básica (todo sobre HTTPS).

A pesar de la inseguridad de almacenar contraseñas no cifradas, suponiendo que no haya una violación de datos, esta comunicación es segura en el backend. Pero, ¿qué pasa con la parte delantera? He visto a personas enviar el nombre de usuario y la contraseña almacenados a la parte delantera, pero esta parece ser una forma fácil de que alguien tome su contraseña.

Parece que sería mejor generar un token de autenticación en el backend y pasarlo a la parte delantera pero todavía estoy un poco preocupado por los posibles problemas de seguridad allí.

Estoy de acuerdo con la implementación de un servidor oauth si es necesario en site2, pero hasta ahora la autenticación básica ha sido más sencilla y me gustaría seguir con ella si es posible.

    
pregunta Sabrina Gelbart 27.07.2016 - 20:07
fuente

1 respuesta

3

Lo que está proponiendo es muy peligroso y en contra de las mejores prácticas de seguridad. Un problema con esto es que los usuarios tienden a reutilizar las mismas contraseñas en diferentes servicios. Esto significa que una contraseña filtrada puede hacer que muchas de sus cuentas queden vulnerables. (Por ejemplo, hack reciente de Mark Zuckerberg ). Esto se combina con el hecho de que los contenidos de la base de datos a veces se filtran debido a fallas como la inyección de SQL.

Para ayudar a proteger a estos reusadores de contraseñas, los sitios web deben esforzarse mucho para proteger los valores de las contraseñas, ya que una violación hace que muchos sitios sean vulnerables.

Esto significa solo almacenar contraseñas en un formato seguro, no reversible. Puede leer sobre la ciencia en ¿Cómo hash seguro de contraseñas? , pero Probablemente sea bueno si usa bcrypt con sus parámetros predeterminados.

Si se estaba integrando con un sitio de terceros que solo era compatible con la autenticación de nombre de usuario / contraseña y ese sitio no estaba dispuesto a proporcionar un mecanismo de autenticación seguro, tal vez tendría sentido almacenar las contraseñas para el sitio remoto (deberían estar encriptadas de manera segura). cuando no esté en uso). Pero es el propietario del sitio remoto, así que haga lo correcto y admita un mejor modelo de inicio de sesión que las contraseñas.

Algunas estrategias posibles son:

  1. OAuth (quizás a través de OpenID ), SAML 2 u otro sistema existente que admita el inicio de sesión único.
  2. Al utilizar autenticación mutua SSL , site2 podría generar certificados de cliente al registrarse y pasarlos a site1. Luego, una violación de la base de datos de site1 solo expone los certificados y no las contraseñas de los usuarios (recuerde que usan las mismas contraseñas para otros sitios).
  3. personificación (¿quizás alguien pueda agregar una mejor referencia en los comentarios?) funciona si hay una confianza sólida modelo entre site1 y site2. Básicamente, si los sitios tienen los mismos autores e implementadores, usted podría permitir que site1 le diga a site2 que simplemente simule que está siendo llamado por JoeUser sin ninguna credencial. Site1 tendría que autenticarse de forma segura en site2 para asegurarse de que los usuarios malintencionados no puedan usar esta función.
  4. Haga que el usuario escriba su contraseña de site2 en site1 siempre que la necesite.

Estoy seguro de que hay más soluciones, pero almacenar contraseñas en un formato reversible (por ejemplo: cifrado) no es una buena práctica. Y el almacenamiento de contraseñas como texto claro es imperdonable.

    
respondido por el Neil Smithline 29.07.2016 - 16:06
fuente

Lea otras preguntas en las etiquetas