L'e-mail di accesso è una cattiva pratica?

29

Nella mia applicazione Spring, stavo progettando di rimuovere le password dal processo di autenticazione inviando un "magic sign-in link" all'indirizzo di posta elettronica dell'utente. Tuttavia, in questa domanda Rob Winch (responsabile di Spring Security) dice il seguente:

Be careful that you know what you are doing in terms of allowing login from a link within an email. SMTP is not a secure protocol and so it is typically bad to rely on someone having an email as a form of authentication.

È davvero così? In tal caso, in che modo l'invio di un link per la reimpostazione della password è più sicuro? Non è log-in utilizzando un collegamento magico la stessa cosa che inviare un collegamento magico per reimpostare una password?

    
posta Utku 15.01.2018 - 16:45
fonte

2 risposte

29

Un collegamento magico da solo non è necessariamente negativo. Un valore completamente casuale a 512 bit non sarà più facile da indovinare di una chiave privata a 512 bit. In generale, è considerata una buona pratica espirarli dopo un ragionevole lasso di tempo. Un buon approccio, che evita anche di dover memorizzare le voci del database, è di incorporare i dati dei token nell'URL e firmarli con una chiave privata. Cioè.

site.com/login?type=login&user=[username]&expires=[datetime]&sig=[signature of other parameters].

Tuttavia la posta elettronica come meccanismo di trasmissione non è sicura.

Di default, l'SMTP offre pochissima protezione contro l'intercettazione. Il traffico può essere crittografato tra i server ma non ci sono garanzie. Anche con la crittografia è ancora spesso possibile man in mezzo la connessione (la crittografia non è la stessa dell'autenticazione).

If so, then how is sending a link for password reset any more secure?

Non lo è. Questo è il motivo per cui diversi servizi richiedono prove aggiuntive prima di inviare il link (o dopo averlo fatto clic).

    
risposta data 15.01.2018 - 16:51
fonte
21

Qui ci sono tre problemi.

  1. Come scrive la documentazione, l'e-mail non è un protocollo sicuro. Le email sono scritte in chiaro sui server di posta. La crittografia tra server e tra server e client è facoltativa e fuori dal tuo controllo. E molto probabilmente non ci si trova in uno scenario in cui è possibile utilizzare uno qualsiasi dei sistemi di crittografia end-to-end opzionali creati su e-mail (PGP, S / MIME ecc.). Pertanto non è possibile garantire che nessuno, tranne il destinatario previsto, visualizzi l'e-mail in chiaro.
  2. I segreti non appartengono agli URL. Gli URL vengono visualizzati nelle cronologie del browser, nelle cache del proxy, nei log del server e in molti altri luoghi in cui non desideri che vengano visualizzate informazioni segrete.
  3. Gli utenti sanno come funzionano le password. Non è stato facile, ma dopo una lunga lotta abbiamo finalmente capito a tutti che le password devono essere tenute segrete. Con il tuo sistema, gli utenti potrebbero non essere a conoscenza di quale sia il segreto pertinente per l'autenticazione con il tuo servizio. Ciò li rende in grado di maltrattare tali informazioni e suscettibili di attacchi di social engineering.

Se invii link con un token di accesso segreto con e-mail, allora dovrebbero essere monouso e scadere piuttosto rapidamente.

    
risposta data 15.01.2018 - 17:27
fonte