Tengo algunas dificultades para hacer esto de la manera correcta (por mucho que pueda) .
Hace algún tiempo, le pedí a pregunta aquí , pidiendo ayuda sobre cómo implementar el envío de un enlace de acceso a través de correo electrónico.
Primero, sé que esto es terriblemente inseguro desde el principio, pero tenemos nuestras razones, así que dejemos eso de lado.
La Idea
La idea básicamente es enviar un correo electrónico con un enlace de larga duración que le permita acceder a un área muy específica de nuestra aplicación.
Enlace de ejemplo: ourwebsite.com/users/ACCESS-KEY
El ataque que quiero evitar
Un usuario adivina otra clave de acceso usando la suya.
Lo que me sugirieron
En mi pregunta anterior, se me sugirió usar una cadena aleatoria como la clave de acceso que se guardará en mi base de datos.
He estado investigando un poco, y me preocupa que mi PRNG no sea lo suficientemente aleatorio, especialmente porque estoy generando un montón de claves de acceso a la vez.
He estado traumatizado por las lecciones de C # en la escuela, donde mi función "aleatoria" cambiaría la producción cada 1000 o más iteraciones.
Estoy pensando en usar Random.org para tener una semilla realmente aleatoria, pero eso parece un poco exagerado.
Mis pensamientos
Tengo 4 opciones que quiero consultar con ustedes antes de sucumbir a Random.org -
- Simplemente utilizando el PRNG, verificando de antemano cómo se comporta (el PRNG de Node.js), tal vez implementando un
sleep(500)
entre generaciones. Si el resultado es similar pero no idéntico, hash con SHA-2. - Tomar el ID de usuario y hacer el hashing a fondo con PBKDF2 (¿importa?), guardarlo en la base de datos y simplemente enviarlo.
- Usando un PRNG implementado como Mersenee Twister, como se sugiere en esta pregunta de stackoverflow .
- Otras cosas de las que no sé nada, como un cifrado que solo sé cómo descifrar, o JWT como lo estoy usando para mis usuarios habituales.
¿Qué piensas?
Gracias por cualquier ayuda!
Aprecio tomarme el tiempo para leer esto.