Tenemos una aplicación web sencilla donde un usuario tendrá que crear una cuenta. Para verificar su dirección de correo electrónico (que se usará para enviar notificaciones más adelante con fines comerciales, que es una de las funciones principales de la aplicación), enviamos un enlace de activación.
Nuestro enlace de activación conduce a un subdominio diferente. Debido a esto, y la capacidad del usuario para abrir este enlace de activación en una computadora / navegador diferente (como en su PC en lugar de en su teléfono), el usuario necesitará obtener un nuevo token CSRF cuando siga el enlace de activación.
Al activar su cuenta, no necesita iniciar sesión. (Puede haber iniciado sesión, pero no en la cuenta que está activando).
Entonces, al activar su cuenta, sucede lo siguiente:
- el usuario hace clic en el enlace,
- se abre el front-end que maneja dichas solicitudes,
- el front-end realiza una solicitud previa al vuelo a nuestro servidor para obtener un token CSRF,
- el front-end recibe el token CSRF,
- el front-end usa los parámetros pasados en la url para enviar una solicitud de activación a nuestro servidor.
- El servidor envía la respuesta apropiada después de manejar la solicitud
- La interfaz muestra la página correspondiente según la respuesta ("Se realizó correctamente, haga clic aquí para iniciar sesión" o "Su cuenta ya estaba activada, haga clic aquí para iniciar sesión" o "el enlace de activación caducó", etc.)
El punto clave aquí es que la persona que activa una cuenta no obtiene ningún derecho especial. No registramos automáticamente a la persona que activa su cuenta. Las personas todavía tienen que hacerlo ellos mismos.
Entonces, me pregunto: ¿por qué necesito este token CSRF? El enlace de activación contiene un token de activación, por lo que cualquier persona capaz de activar una cuenta tuvo suerte o recibió el correo electrónico. Si un atacante activó una cuenta, todo lo que sucedería es "la cuenta está activada".
Me gustaría quitar el token CSRF de este proceso para acelerar el proceso (especialmente para personas con Internet de alta latencia). ¿Estaría debilitando mi seguridad si eliminara el token CSRF del proceso, de modo que el proceso se resuelva a esto:
- el usuario hace clic en el enlace,
- se abre el front-end que maneja dichas solicitudes,
- el front-end usa los parámetros pasados en la url para enviar una solicitud de activación a nuestro servidor.
- El servidor envía la respuesta apropiada después de manejar la solicitud
- La interfaz muestra la página correspondiente según la respuesta ("Se realizó correctamente, haga clic aquí para iniciar sesión" o "Su cuenta ya estaba activada, haga clic aquí para iniciar sesión" o "el enlace de activación caducó", etc.)
TL; DR: ¿Un token CSRF agrega seguridad para los puntos finales REST donde no es necesario iniciar sesión?