Acceso a través del enlace en el correo electrónico: ¿Cómo puedo hacer que esto sea lo más seguro?

3

Necesito su opinión profesional sobre este asunto, por favor.

La aplicación que estoy creando tiene 2 partes: Maestros & estudiantes .
Maestros usan la aplicación para construir un proyecto y adjuntan estudiantes a él.
Luego, los estudiantes acceden al proyecto en nuestro sistema y completan algunas tareas.

No queremos que los usuarios se registren o utilicen una cuenta existente (a través de oAuth2). Simplemente queremos que tengan una forma rápida y sencilla de ingresar al sistema, con la menor configuración posible.
Debe tenerse en cuenta que debemos permitir varias entradas desde diferentes ubicaciones.
Cada estudiante tendrá múltiples "puntos de acceso", uno para cada proyecto al que esté vinculado.

La razón por la que nos importan tan poco los posibles robos que pueden ocurrir es que los estudiantes tienen posibilidades muy limitadas, y los datos que se les muestran no son confidenciales.

Puedo pensar en 2 opciones adecuadas:

  1. Envíe al alumno un correo electrónico con un enlace que contenga una clave de acceso, por ejemplo: example.com/students/skfn38rhsah93e2dsasdsd2 .
    El enlace no caducará.
  2. Envíe al alumno un correo electrónico con un enlace y una clave de acceso breve que se requerirá mediante el enlace, por ejemplo:
    Enlace: example.com/students/dfwkl4tihifhdso03n
    Clave de acceso: A7F21D

La segunda opción es más segura porque la primera se guardará en el historial del navegador, se enviará en la referencia de http y generalmente se expondrá. El uso de la segunda opción asegura que quien acceda al enlace tenga acceso a la cuenta de correo electrónico. Sin embargo, es un proceso un poco más largo para el estudiante.

Así que mis preguntas son:

  1. En su opinión, ¿la seguridad adicional que ofrece la segunda opción vale la pena en un proceso más largo? Sé que esta es una pregunta subjetiva, pero su opinión significa mucho para mí.
  2. Si piensa que la primera opción es mejor, ¿por cuánto tiempo debería ser la clave de acceso?
    Quiero incrustar la identificación del estudiante y la identificación del proyecto dentro, así que estaba pensando en usar JWT, pero son 220 caracteres. ¿Es demasiado? ( las URL pueden contener hasta 2000 ).
  3. Si cree que la segunda opción es mejor, ¿por cuánto tiempo debería ser la clave de acceso?
    ¿Cómo debo diseñar el enlace? ¿Igual que en la primera opción? (usando un JWT)
  4. ¿Hay una mejor manera?

¡Gracias por ayudar!

Nota: Estoy planeando usar SSL, solo para tu información.

    
pregunta Neta 20.12.2015 - 19:22
fuente

1 respuesta

5
  
  1. En su opinión, ¿la seguridad adicional que ofrece la segunda opción vale la pena en un proceso más largo? Sé que esta es una pregunta subjetiva, pero su opinión significa mucho para mí.
  2.   

Vio correctamente la seguridad que podría causar con el historial del navegador. Solo tú puedes determinar si vale la pena.

Sin embargo, en lugar de una cadena aleatoria enviada por correo electrónico, que obligará principalmente a los estudiantes a encontrar el correo electrónico en cada conexión, puede solicitar información que ya conozcan o que sea más accesible para ellos (los últimos números de la Identificación del estudiante, algo como la fecha de nacimiento, etc.).

  
  1. Si cree que la primera opción es mejor, ¿cuánto tiempo debe durar la clave de acceso?   Quiero incrustar la identificación del estudiante y la identificación del proyecto dentro, así que estaba pensando en usar JWT, pero son 220 caracteres. ¿Es demasiado? (Las URL pueden contener hasta 2000).
  2.   

Si es posible, evitaría poner cualquier información en la clave de acceso pero utilizaría una cadena aleatoria en su lugar. Luego, en el lado del servidor, puede tener una base de datos que asociará esta clave de acceso aleatorio a la información que desee (ID de estudiante, etc.). De esta manera, dado un enlace, no será posible que los estudiantes adivinen otros enlaces válidos.

En cuanto a la longitud, alrededor de 20 caracteres, como tiene ahora, parece estar bien.

Creo que esto también responde a tus dos últimas preguntas.

    
respondido por el WhiteWinterWolf 20.12.2015 - 20:51
fuente

Lea otras preguntas en las etiquetas