¿Qué tan seguro es para una aplicación confiar en un clic en un enlace en un correo electrónico?

1

En mi aplicación de preguntas y respuestas, Joe se registra, inicia sesión y agrega una pregunta. Luego comparte la pregunta por correo electrónico a sus amigos de confianza.

¿Es seguro proporcionar un enlace dentro del correo electrónico generado por la aplicación para que sus amigos puedan responder directamente a la pregunta sin tener que registrarse en el sitio?

El objetivo principal es que me gustaría que los amigos del usuario puedan responder a su pregunta sin tener que registrarse en el sitio de la aplicación. Supongamos que el enlace incrusta la identificación de correo electrónico del receptor, de modo que la aplicación pueda asignar cada respuesta a la identificación de correo electrónico que inició ese enlace.

¿Qué precauciones debo incluir para evitar o detectar clics maliciosos en ese enlace?

    
pregunta Anand 09.10.2014 - 15:58
fuente

3 respuestas

1

Cree un número aleatorio criptográfico y agréguelo como un parámetro en la url (token). Luego solo muestra la página real si es un token válido. Los tokens deberían estar almacenados en la base de datos, obviamente.

  

¿Qué tan seguro es proporcionar un enlace dentro del correo electrónico generado por la aplicación para   Permitir que sus amigos respondan directamente a la pregunta sin tener   para registrarse en el sitio?

Es muy seguro si su número aleatorio criptográfico es muy largo. La sesión / autenticación también utiliza simplemente un número aleatorio criptográfico. Si considera que su cookie de sesión / autenticación es segura, también puede considerar que una es segura.

Adivinar un número aleatorio criptográfico muy largo llevará MUCHO tiempo. Para mayor seguridad, puedes considerar

  • token de una vez
  • token que caduca con el tiempo
  

¿Qué precauciones debo incluir para evitar o detectar maliciosos?   hace clic en ese enlace?

Ninguna. No se puede diferenciar entre un atacante y el usuario real. Pero esto es cierto para todo en la web ... Un atacante puede intentar adivinar la contraseña de un usuario de la misma manera que puede intentar adivinar su token. Pero, ambos probablemente tomarán mucho tiempo, por lo que no es práctico.

    
respondido por el Gudradain 09.10.2014 - 16:41
fuente
2

Yo crearía tokens (algunos hashes aleatorios o GUID ) para cada usuario previsto y lo pasaré en string string para identificar a los usuarios individuales. Algo así como una contraseña temporal . Poner esto en la cadena de consulta es conveniente para el usuario. Hacer el GUID, o el token temporal o por un solo uso reducirá el uso compartido. Su única preocupación después de esto es si sus usuarios necesitan editar o enmendar su respuesta a su pregunta después del hecho. Enviaría el ID de la pregunta junto con el GUID. Como ejemplo:

http://example.com/thread/27?AHG324y6CVSA452aw34aF

Donde http://example.com es su dominio, thread es su controlador / acción (MVC) y 27 identifica el hilo o la pregunta que se realiza. Luego puede usar su token AHG324y6CVSA452aw34aF para identificar quién envió la respuesta. (A menos que vaya por el anonimato, entonces depende de usted, pero los usuarios no confiarán en usted, o mejor dicho, yo no le confiaría este enfoque).

Suena como un proyecto divertido.

EDIT:

Nota importante: Los GUID son únicos, no aleatorios , por lo que no debe utilizarse en este escenario.

    
respondido por el Oxymoron 09.10.2014 - 16:04
fuente
1

La mejor apuesta es incluir un identificador o token único en cada correo electrónico individual. Este token debe ser aleatorio, difícil de adivinar, y de un conjunto lo suficientemente grande como para que los valores que se ingresen al azar nunca produzcan un token válido.

Estas fichas deberían limitarse en el alcance y la escala de lo que pueden hacer. Si limita a los usuarios a una única respuesta y comentarios sobre esa respuesta, entonces compartir el enlace se mitigará en gran medida, ya que solo se puede hacer una entrada principal desde ese correo electrónico sin registrarse.

    
respondido por el AJ Henderson 09.10.2014 - 16:23
fuente

Lea otras preguntas en las etiquetas