Abbiamo una semplice webapp in cui un utente dovrà creare un account. Per verificare il loro indirizzo email (che sarà usato per inviare notifiche in seguito per motivi di lavoro, che è una delle caratteristiche principali dell'applicazione), inviamo un link di attivazione.
Il nostro link di attivazione porta a un sottodominio differente. Per questo motivo, e la possibilità per l'utente di aprire questo link di attivazione su un altro computer / browser (ad esempio sul PC anziché sul telefono), l'utente dovrebbe ottenere un nuovo token CSRF quando segue il collegamento di attivazione.
Quando attivi il tuo account, non è necessario che tu abbia effettuato il login. (Potresti essere loggato, ma non all'account che stai attivando.)
Quindi, quando attivi il loro account, accade quanto segue:
- l'utente fa clic sul link,
- il front-end che gestisce tali richieste si apre,
- il front-end effettua una richiesta di pre-volo al nostro server per ottenere un token CSRF,
- il front-end riceve il token CSRF,
- il front-end utilizza i parametri passati nell'URL per inviare una richiesta di attivazione al nostro server.
- Il server restituisce la risposta appropriata dopo aver gestito la richiesta
- Il front-end visualizza la pagina appropriata in base alla risposta ("È riuscito, fai clic qui per accedere" o "Il tuo account è già stato attivato, fai clic qui per accedere" o "Link di attivazione scaduto", ecc.)
Il punto chiave qui è che la persona che attiva un account non ottiene alcun diritto speciale. Non registriamo automaticamente la persona che attiva il proprio account. Le persone devono ancora farlo da soli.
Quindi mi chiedo: perché ho bisogno di questo token CSRF? Il link di attivazione contiene un token di attivazione, quindi chiunque sia in grado di attivare un account è davvero fortunato o ha effettivamente ricevuto l'e-mail. Se un utente malintenzionato ha attivato un account, tutto ciò che accade è "l'account è attivato".
Mi piacerebbe prendere il token CSRF da questo processo per accelerare il processo (in particolare per le persone con Internet ad alta latenza). Dovrei indebolire la mia sicurezza se ho tolto il token CSRF dal processo, in modo che il processo risolva in questo modo:
- l'utente fa clic sul link,
- il front-end che gestisce tali richieste si apre,
- il front-end utilizza i parametri passati nell'URL per inviare una richiesta di attivazione al nostro server.
- Il server restituisce la risposta appropriata dopo aver gestito la richiesta
- Il front-end visualizza la pagina appropriata in base alla risposta ("È riuscito, fai clic qui per accedere" o "Il tuo account è già stato attivato, fai clic qui per accedere" o "Link di attivazione scaduto", ecc.)
TL; DR: Un token CSRF aggiunge sicurezza per gli endpoint REST dove non è necessario effettuare l'accesso?