Mejores prácticas para autenticación / seguridad de aplicaciones web (cualquier plataforma)

12

Hoy recibí una pregunta de mi administrador que me pregunta qué piensa que se considera un diseño aceptable para la autenticación de una aplicación de formulario web, especialmente en lo que respecta a la naturaleza de muchos navegadores populares para "Recordar contraseña" para su nombre de usuario típico campos de inicio de sesión de contraseña.

Tengo problemas para encontrar una respuesta que me parezca aceptable. A la luz de los fallos de seguridad vergonzosos de Sony, realmente quiero tener cuidado, a pesar de que los datos que se almacenan en las personas tienen una sensibilidad menor. No estamos almacenando números de seguridad social ni direcciones, sin embargo, estamos almacenando números de teléfono, direcciones de correo electrónico y una foto de un visitante.

Le preocupa que un usuario pueda simplemente recordar la contraseña en un terminal público, entonces alguien puede simplemente saltar a este terminal y comenzar a ver o modificar datos de forma no autorizada. Sin embargo, estoy bastante seguro de que al menos en las estaciones de trabajo de Windows el navegador no "recordará la contraseña" en las cuentas de usuario de Windows.

Más allá de esto, estoy implementando un cifrado de contraseña unidireccional en el lado del servidor (almacenar la contraseña cifrada en la base de datos, cifrar la contraseña proporcionada por el usuario en el servidor, compararla con la cadena cifrada de la base de datos). No hay planes inmediatos para incorporar el cifrado SSL, sin embargo, esta sigue siendo una opción.

¿Existen fallas de seguridad importantes con este enfoque? ¿Tienes alguna sugerencia mejor?

    
pregunta maple_shaft 23.05.2011 - 20:05

5 respuestas

13

Algunos consejos de alto nivel:

  1. Almacene solo los datos que necesita
  2. Siempre cifre los datos confidenciales (SSN, contraseña, número de tarjeta de crédito, etc.) cuando los almacene
  3. Siempre cifre el tráfico usando SSL al transmitir / recibir datos confidenciales
  4. Si tiene dudas sobre la sensibilidad de la información, cifrada
  5. No confíe en la entrada del usuario (alguien intentará ingresar algo malo)
  6. No confíe en sus datos (alguien puede cambiarlos en la base de datos, por ejemplo, inyectando un script malicioso)
  7. No lances tu propio cifrado
  8. Asegure los servidores que alojan las aplicaciones / bases de datos
  9. Aumente la carga de los usuarios finales por razones de seguridad (restricciones de contraseña, nunca exponga contraseñas, no envíe direcciones URL por correo electrónico, reduzca el tiempo de sesión, etc.)

Mi sugerencia para usted sería obtener un libro sobre cómo proteger las aplicaciones web. Simplemente hay demasiada información para transmitir en una sola respuesta / blog / artículo. El tema del cifrado solo es sustancial.

    
respondido por el Mayo 23.05.2011 - 20:57
2

Puede intentar sobrepasar el comportamiento del navegador. Aquí le damos algunos consejos:

enlace

    
respondido por el Chad Thompson 23.05.2011 - 20:12
1

Yo diría que deberías estar bien.

La mayoría de los usuarios serán lo suficientemente brillantes como para no guardar su contraseña en un terminal público, y las contraseñas se almacenarán por perfil. Tenga en cuenta que podrían escribirlo en una nota adhesiva o usar una contraseña débil.

Si la página de inicio de sesión no está cifrada a través de SSL, no sería muy difícil para un atacante rastrear esa contraseña mientras viaja a través de la red. Sin embargo, un buen trabajo al hacer la contraseña en la base de datos evitará que un posible atacante vea las contraseñas de todos (que podrían usar con la dirección de correo electrónico para intentar iniciar sesión en otros sitios en los que el usuario podría estar).

Si aún desea, hay formas de deshabilitar el comportamiento del navegador como lo ha señalado Chad. Solo lo he visto yo mismo en el sitio web de mi banco y en el sistema Live de Microsoft.

    
respondido por el David Hogue 23.05.2011 - 20:38
1

En cierto punto, no puede (y no está legalmente obligado a) proteger a un usuario de ellos mismos. La funcionalidad de "recordar contraseña" puede ser arriesgada, pero es un riesgo asumido por el usuario. Del mismo modo, si el usuario decide reutilizar su contraseña para múltiples servicios, también asume ese riesgo. Tampoco está obligado a advertirles que no escriban su contraseña en una nota adhesiva y la peguen en su monitor, aunque los usuarios a menudo también lo hacen.

Es decir, hasta que alguien litigue y cambie con éxito las reglas. Consulte también: "Advertencia: el contenido puede estar caliente".

    
respondido por el Rein Henrichs 23.05.2011 - 20:48
0

No creo que pueda controlar de manera confiable si el navegador recuerda una contraseña. Es simplemente fuera de sus manos si el navegador hace eso o no. Tampoco es necesariamente un gran riesgo para la seguridad de usted . Siempre debe asumir que los ataques se pueden realizar desde inicios de sesión válidos. No asuma que si alguien tiene un usuario o una contraseña de inicio de sesión válido, no estará en lo correcto. Hay muchas maneras en que las contraseñas pueden caer en las manos equivocadas, después de todo.

Supongo que lo que podría hacer es asignar al azar los nombres de los campos en su formulario de inicio de sesión cada vez. En lugar de <input name="username" , usa algo como <input name="user658667587" . Eso haría que los nombres de usuario en caché sean bastante inútiles. Pero no sé si la sobrecarga valdría la pena. Sin mencionar los inconvenientes de los usuarios que no están en las máquinas públicas.

Si se encuentra en una situación extremadamente sensible a la seguridad (banca, inversiones), simplemente puede preguntar a las personas durante el inicio de sesión si es una máquina pública. También puede almacenar en la caché las direcciones IP conocidas cuando las personas inician sesión, y si inician sesión desde una ubicación diferente, se requiere un número de pin no tipificable (por ejemplo, haga clic en las imágenes) además del usuario / pase normal. Mi banco hace algo parecido a eso.

    
respondido por el GrandmasterB 23.05.2011 - 20:44

Lea otras preguntas en las etiquetas