Qualcosa di particolarmente sbagliato nell'inserire un codice di autenticazione nelle e-mail di marketing?

0

Ho lavorato al mio primo progetto e i miei utenti registrati inizialmente non sono stati particolarmente appiccicosi. Vorrei inviare loro un'email con alcune notizie e informazioni e farle accedere immediatamente quando raggiungono il link di invito all'azione. Stavo pensando di generare un codice di autenticazione con random_bytes() di PHP e di memorizzarlo in una tabella con il corrispondente user_id .

Quindi, in sostanza, l'email sarebbe:

Hey oldUser2017, newUser2018 sent you a message! Click <a href="http://mysortofokproject.com/message/20992?authCode=657f8b8da628ef83cf69101b6817150>here</a> to see it instantly and not even have to log in or reset your password or anything annoying!

E sul back-end

userId = getUserIdFromAuthCode($get['authCode'])
if(userId){
 $session = getUserDetailsFromUserId(userId)
}

Dato che questo è il modo in cui autenticiamo un indirizzo email e attiviamo un account:

  1. Che cosa mi farebbe così male fare questo?
  2. La% dirandom_bytes() di PHP è abbastanza buona e quale lunghezza useresti?
  3. Dovrebbe scadere?
posta user3238414 21.08.2018 - 02:52
fonte

3 risposte

0

Non penso che sia una buona idea. Innanzitutto, le e-mail vengono inviate in chiaro, il che significa che non sono né protette né private. Anche se alcuni dei luppoli possono essere crittografati con TLS (nessuna garanzia), al momento è abbastanza facile per un nodo sul percorso verso l'MITM l'email comunque, o per qualsiasi server intermedio (o punto finale) per leggere l'email in chiaro. Questo è molto simile all'invio di una password utente tramite e-mail ed è una cattiva idea.

Anche il tuo esempio usa http e non https, quindi perderai questa password nei log del server e a chiunque controlli passivamente la rete.

Ancora più importante, questo ignora completamente il codice di accesso, aggiungendo ulteriori potenziali vulnerabilità di sicurezza. Ad esempio, probabilmente limiterai il numero di tentativi di accesso, ma limiti anche il numero di tentativi di accesso usando queste nuove password secondarie che stai generando?

Se hai deciso di farlo, il codice dovrebbe scadere definitivamente dopo che l'utente ha seguito il collegamento o dopo un breve periodo di tempo. Sarebbe meglio non registrare affatto l'utente e forse usare questo codice per visualizzare solo il messaggio (anche se probabilmente non è ancora una buona idea).

    
risposta data 21.08.2018 - 05:03
fonte
0

Proposta: Che cosa succede se crei una pagina e un servizio separati che visualizzano il messaggio a un utente che segue quel link, ma poi invalida contemporaneamente quel authCode, in modo che possa essere utilizzato una sola volta? (Puoi anche inserire un limite di tempo per la sua validità).

Questo ti permetterà di mostrare il messaggio senza problemi, mantenendo al sicuro i tuoi utenti. Puoi sempre fornire un modulo per accedere (o reimpostare una password) sotto il messaggio sulla stessa pagina; se il tuo utente è già su quella pagina e ha effettuato l'accesso da un link nella sua e-mail, è probabile che il lavoro extra richiesto per l'effettivo accesso sembrerà minimo.

Forse puoi mantenere più utenti in questo modo senza eludere completamente la tua sicurezza?

    
risposta data 20.09.2018 - 10:50
fonte
0

Non posso parlare per PHP, ma

  1. What would be so bad about me doing this?

Molti siti Web utilizzano codici hash incorporati in un collegamento per capire dove inviare gli utenti dopo aver fatto clic su un collegamento. Tuttavia, l'invio di un codice di autenticazione lungo è piuttosto rischioso. Naturalmente, se segui le buone pratiche e assicurati che le connessioni tra il tuo server, il tuo server di posta e il server di posta del destinatario siano crittografate, non devi necessariamente sapere se il destinatario ha una connessione crittografata tra il suo server di posta e qualsiasi client lui o lei usa.

E questo è un presupposto centrale che devi fare: gli utenti sono stupidi. Potrebbero deselezionare "Usa SSL / TLS" in Thunderbird perché non sanno cosa fa. Potrebbero inoltrare l'email sbagliata alla persona sbagliata. Riduci al minimo il rischio e prova a non inviare codici di autenticazione a meno che non sia assolutamente necessario (pensa al recupero della password).

Per leggere messaggi o altre informazioni banali di solito è meglio consentire all'utente di autenticarsi una volta raggiunta la pagina di destinazione.

  1. Should it expire?

Sì, sicuramente. Se decidi di inviare i codici di autenticazione, fallo scadere nel giro di poche ore (o anche 30 minuti o meno, anche!) Se invii codici di collegamento che reindirizzano gli utenti all'autenticazione sul tuo server, la scadenza potrebbe essere impostata anche più a lungo perché ci sono meno possibilità di fuga di informazioni sull'autentico.

    
risposta data 20.09.2018 - 11:55
fonte

Leggi altre domande sui tag