Seguridad de autorización de usuario general

0

Estoy creando un sitio web que necesita la autorización del usuario. Es la primera vez que creo un sitio web para publicar, y también la primera vez que intento hacer cualquier tipo de autorización. El siguiente es mi plan, ¿podría decirme si tengo algún agujero de bucle obvio y si hay algo más que deba tener en cuenta? Si me interesa o es relevante, estoy usando un nodo de fondo y backs de mysql tranquilos y backbone en el extremo delantero.

proceso de inicio de sesión:

  1. El usuario intenta iniciar sesión. Eso envía una dirección de correo electrónico, una contraseña y una clave generada aleatoriamente (no se ha decidido sobre una cantidad de bits).
  2. El servidor de autorización acepta esta información, cifra la dirección de correo electrónico y la contraseña, y la compara con los valores en la tabla user_auth de la base de datos de autorización. Si hay una coincidencia, crea un ID de sesión.
  3. El servidor de autorización luego coloca el ID de la sesión, la dirección de correo electrónico y la clave aleatoria generada por el usuario en una fila de la tabla de la sesión (en la base de datos de datos a la que accede principalmente el servidor de datos), y envía al usuario una ID de sesión y cualquier otra otros datos relevantes de la página que se cifran utilizando la identificación de la sesión como clave.
  4. Si todo esto sucede, el usuario recibe el ID de sesión y descifra los datos adicionales y todos los datos futuros utilizando el ID de sesión.
  5. En cada acción realizada por el usuario, el cliente enviará la dirección de correo electrónico y la ID de sesión cifradas con la clave generada aleatoriamente original que se envió al servidor de datos, y si la ID de sesión y la dirección de correo electrónico coinciden, los datos se descifran utilizando la clave, y luego se intenta procesar los datos.

Por supuesto, también intentaré sanear todos los datos antes de que se genere una consulta SQL, también habrá validación de formularios en vivo y validación del modelo de red troncal. El usuario de mysql que usarán los servidores de nodejs no tendrá permisos de eliminación que serán atendidos mediante etiquetas y un demonio que se ejecute en el back-end.

Para crear una cuenta:

  1. El usuario enviará una dirección de correo electrónico, contraseña, nombre, apellido al servidor de autorización.
  2. El servidor de autorización colocará esto junto con una fecha y hora en una tabla temp_user y un correo electrónico bien redactado estará compuesto con un ID de sesión integrado en la url.
  3. El usuario hará clic en el enlace del correo electrónico al que irá a una "página de validación de su cuenta" o algo así. Al hacer clic en el enlace, se guardará el valor de id de sesión en el código del cliente y se creará una clave generada aleatoriamente que se envía al servidor. En caso de éxito, mostrará al usuario la página.
  4. En el lado del servidor, el servidor de autorización colocará el nombre de usuario y la contraseña, cifrados, en la tabla user_auth de la base de datos de autorización, colocará el nombre y apellido en la tabla de usuario en la base de datos de datos y luego eliminará (la única tabla Tendrá permisos de eliminación para la fila correspondiente en la tabla temp_user.
  5. Ahora el cliente y el servidor deben estar en la misma página que en el primer escenario.

si en algún punto el ID de sesión es nulo o no coincide, se le pedirá al usuario que inicie sesión nuevamente y el proceso comenzará de nuevo.

¿Hay algo que me esté perdiendo?

    
pregunta The Composer 09.08.2013 - 23:02
fuente

2 respuestas

1

No reinventes la rueda .

En primer lugar, recomendaría el uso de un controlador de sesión y un sistema de autenticación existentes. nodejs es popular y hay muchas bibliotecas que puedes usar. OAuth es un estándar hermoso y protegerá a sus usuarios.

Dicho esto, falta mucho en esta lista. Recomiendo leer la hoja de referencia de autenticación de OWASP y OWASP Hoja de trucos para la gestión de sesiones . Lea también el Top 10 de OWASP ya que muchos de estos problemas pueden llevar a una sesión o cuenta comprometida.

Algunos de los mayores problemas con su diseño: use HTTPS durante la vida de la sesión , nunca encripte las contraseñas, siempre deben estar con hash . Además, muchas cosas pueden ir mal "encriptación", esto no es una varita mágica, y muy pocos desarrolladores implementan esto correctamente. (Después de todo, nadie puede descifrar el cifrado DOBLE rot-13, porque está "cifrado" ... dos veces).

    
respondido por el rook 10.08.2013 - 07:40
fuente
2
  

¿Hay algo que me esté perdiendo?

Sí, hay algo que te falta. No estoy familiarizado con Node.js pero puedo garantizarle que existen implementaciones de bibliotecas de autenticación y autorización.

El uso de una biblioteca establecida le ahorrará muchos dolores de cabeza cuando se trata de protegerse contra los casos extremos, así que simplifique su vida y elija una biblioteca bien examinada y úsela.

    
respondido por el Ayrx 10.08.2013 - 05:33
fuente

Lea otras preguntas en las etiquetas