Seguridad de inicio de sesión: guardar una sesión [cerrado]

-1

Estoy creando un registro en el sistema. El sistema más sencillo simplemente verificará una base de datos para un inicio de sesión y una contraseña, y luego un mismo session var que indica login=true Estoy interesado en otras cosas que puedo hacer para hacerlo más seguro. Aquí hay una lista general de cosas que ya he encontrado. Siéntase libre de usar algunos de estos elementos o la lista de uno que no he mencionado. Estoy realmente interesado en encontrar agujeros de seguridad obvios que no estoy cubriendo.

  • las contraseñas de codificación unidireccional en la base de datos
  • guardar y validar la dirección IP de los usuarios
  • guarde una variable en la sesión que cambie cada 10 minutos (en lugar de login=true ).
  • Utilice la base de datos en lugar de sesiones.
  • Use JavaScript para validar que el usuario está usando un navegador.
  • Bloquear una cuenta después de 5 fallos de inicio de sesión.
  • utilizar https
pregunta Hoytman 20.03.2014 - 14:31
fuente

2 respuestas

6

Esta pregunta es extremadamente amplia, pero le indicaré información que podría ayudar:

respondido por el Polynomial 20.03.2014 - 14:43
fuente
2

Sí, al final para estar "conectado" es igual a haber establecido una variable de sesión. Así que tu pregunta básicamente se reduce a la seguridad de la sesión. Aquí hay un par de cosas que puede querer revisar y / o considerar:

  • Use cookies para sus ID de sesión, el uso compartido de enlaces no conducirá al secuestro de sesión.
  • Lo ideal es usar HTTPS, de modo que las sesiones no puedan ser secuestradas fácilmente en entornos abiertos de Wi-Fi.
  • Asegúrese de que falsificación de solicitud entre sitios no funcione en sus sitios.
  • Asegúrese de no ser vulnerable a Ataques de secuencias de comandos entre sitios , o al menos haga uso de HttpOnly atributo de las cookies.
  • Asegúrese de que sus ID de sesión no sean predecibles y no puedan ser fijadas a valores predefinidos por el usuario
  • Asegúrese de que los datos de su sesión no sean (fácilmente) accesibles para otros. Por ejemplo, en entornos de alojamiento virtual podría ser fácil para otros leer o incluso manipular los datos de su sesión, que generalmente es un archivo simple dentro de /tmp .

Obviamente, esta no es una lista exhaustiva, sino algunas cosas que me pasaron por la cabeza.

  

las contraseñas de codificación unidireccional en la base de datos

Eso no hace falta decirlo! Pero la codificación unidireccional simple (es decir, el hashing) no es suficiente en estos días. Busque en las funciones de derivación clave reales , por ejemplo. PBKDF2 y bcrypt . Estos están diseñados para reducir drásticamente los ataques de fuerza bruta.

  

Utilice la base de datos en lugar de sesiones.

¿Qué quieres decir con eso? La base de datos no sabe nada sobre HTTP.

  

Use JavaScript para validar que el usuario está usando un navegador.

No se puede hacer.

  

Bloquea una cuenta después de 5 fallos de inicio de sesión.

Aunque es una idea noble, es completamente poco práctica para la mayoría de los sitios. ¿Qué haces con las cuentas que están bloqueadas? ¿Vas a ofrecer soporte telefónico? ¿Cómo autenticar a los usuarios en el teléfono? En lo que podría pensar es en un tiempo de espera, lo que haría inviable que los atacantes incluso intenten contrarrestar las contraseñas de fuerza bruta.

    
respondido por el Karol Babioch 20.03.2014 - 14:48
fuente

Lea otras preguntas en las etiquetas