Vision
Immagino un sistema di accesso / registrazione, in cui l'utente immetta la sua email e riceve un'e-mail con un link per accedere. L'utente fa clic sul link ed è automaticamente connesso (confermando l'indirizzo e-mail nel processo).
Questa sarebbe una forma di autenticazione senza password.
Problema
Il problema che vedo con questo approccio è che un link invierà una richiesta GET - ma questa richiesta GET cambierà lo stato della sessione utente (attivandola).
Le richieste GET dovrebbero (in base allo standard HTTP) non avere mai effetti collaterali. Questo è qualcosa che i browser assumono anche, il che significa che potrebbero prefetch le richieste GET per ottimizzare le prestazioni / l'esperienza utente.
Supponiamo che tu stia utilizzando Gmail nel browser. Potrebbe quindi accadere che il browser precarri il collegamento nell'email?
Sarebbe un enorme problema di sicurezza se fosse sufficiente aprire l'e-mail per accedere al sito.
Cosa ho considerato
Uso di JavaScript nella pagina di destinazione per inviare una richiesta POST
Il mio istinto mi dice che, anche se HTML / CSS / JavaScript da un collegamento può essere precaricato, nessuno di questo codice (specialmente il JavaScript) verrà eseguito prima che il browser apra esplicitamente il link.
Questo dovrebbe significare che se la sessione utente viene in qualche modo attivata usando JavaScript (inviando una richiesta POST al back-end), dovrebbe essere sicuro usare una richiesta GET per arrivare a questa pagina (come link nell'email).
Ho ragione assumendo questo?
È una cattiva pratica farlo in questo modo?
Utilizzo di un modulo HTML nel corpo dell'e-mail
Un'altra opzione sarebbe quella di inserire un modulo nell'e-mail, che consentirebbe una richiesta POST direttamente dall'e-mail.
Sembra, tuttavia, che diversi client di posta elettronica bloccheranno le richieste di invio da e-mail. I client di posta elettronica che consentono l'invio di moduli tendono ad avvisare l'utente che l'email è probabilmente dannosa. Sembra che questa non sia davvero una buona soluzione.