Accedi con la posta elettronica è più sicuro di un nome utente?

3

Nella progettazione della mia applicazione web, sto cercando di scegliere ora i passaggi finali dei profili dei membri per la sicurezza. * Devo scegliere se utilizzare un sistema che si accede con un nome utente o e-mail e che è più sicuro?

Con il design attuale della tabella dei membri, ho questa impostazione:

  • L'ID membro è randomizzato su 8 cifre.
  • Hanno una nickname da visualizzare quando vengono accolti. Per esempio. Benvenuto, $nickname .
  • Le password sono crittografate usando bCrypt.

Oltre alla sicurezza che ho aggiunto alla progettazione dell'applicazione web, che è più sicura? Un nome utente e password o e-mail e password?

Inoltre, conosco i nuovi standard sono per l'e-mail e la password, poiché ne sto vedendo di più.

    
posta Traven 12.05.2014 - 11:10
fonte

6 risposte

7

Offri loro una scelta. Ad esempio, il mio indirizzo e-mail è abbastanza lungo mentre di solito seleziono nomi utente brevi; puoi sviluppare il tuo modulo di accesso per accettarli entrambi.

I nomi utente non servono per proteggere gli account, le password lo sono. Non è per nessuna ragione che il nome utente sia visibile quando viene inserito nel browser, mentre la password è nascosta. Inoltre, gli utenti spesso riutilizzano i nomi utente, che, a differenza del riutilizzo della password, non dovrebbero costituire un problema. E, naturalmente, gli indirizzi e-mail erano e non sono mai pensati per non essere condivisi con nessuno.

Ma il problema principale: non memorizzare nomi utente o indirizzi e-mail hash / crittografati, perché li si vuole utilizzare per scopi diversi dall'accesso. Se qualcuno ruba il database con le password con hash, avranno anche i nomi utente e gli indirizzi e-mail. Andato è il "vantaggio di sicurezza"!

Quindi, costringendo gli utenti ad accedere usando solo l'indirizzo e-mail (e la password) o solo il nome utente (e la password) non ha senso.

La tua difesa dovrebbe implementare password complesse e assicurarti di crittografarle con una strong funzione di hashing della password. Non dimenticare di impostare il costo alto abbastanza .

Inoltre, per impedire a un utente malintenzionato che non ha rubato il tuo database di noleggiare una rete bot e di forzare le password utente deboli, limitare il numero di tentativi di accesso all'ora per indirizzo IP. Inoltre, se si verificano molti tentativi di accesso per un acconto, bloccare i tentativi di accesso da qualsiasi indirizzo IP da cui non è stato eseguito correttamente il login per l'account in passato.

    
risposta data 12.05.2014 - 12:15
fonte
5

Avere un nome utente fornisce più oscurità di quanto non faccia la posta elettronica che fornisce sicurezza come un bruteforcer richiederebbe il nome utente prima di poter eseguire un attacco.

Un'email non è oscura come un nome utente come email. Gli utenti possono usare la loro e-mail in ogni altra registrazione dell'account, iscriversi alla newsletter o persino postarla da qualche parte per avere qualcuno che ti contatta. Se un hacker fa un po 'di ricerche o ti conosce e in qualche modo ha ottenuto il tuo indirizzo email attraverso il social engineering, avrà maggiori probabilità di fare un attacco bruteforce o di indovinare la password.

Un nome utente implementa più sicurezza in questo modo, poiché ora l'hacker deve conoscere sia il nome utente che la password per eseguire l'attacco. È più facile ottenere il proprio indirizzo email con un motivo legittimo che ottenere il proprio nome utente. Se hai caratteristiche come "aggiunta del nome utente all'elenco degli amici", potresti invece implementare l'aggiunta per ID membro e non verrà utilizzata per l'accesso.

Un indirizzo email offre praticità all'utente in quanto sarà necessario memorizzare una cosa di minore importanza in quanto molti di noi che possiedono e utilizzano la posta elettronica spesso ricordano il proprio indirizzo email. Sicurezza e convenienza sono sempre un compromesso reciproco.

Nota anche che per mantenere il nome utente oscuro, assicurati di non restituire un messaggio come "Nome utente non esistente" al login fallito. Restituisce qualcosa del tipo "login fallito: controlla il tuo nome utente / password"

La maggior parte delle banche so che non usano l'indirizzo email per l'autenticazione, preferiscono il nome utente in quanto fornisce più oscurità. In questo caso potresti considerare username come un'altra forma di 'password', solo che è una password meno sicura in quanto non è crittografata e può essere vista in chiaro da altri sbirciando lo schermo.

    
risposta data 12.05.2014 - 11:39
fonte
3

C'è poco da guadagnare avendo un nome utente segreto o qualcosa del genere. Finché si impone un criterio di password adatto, gli attacchi di forza bruta saranno inefficaci, indipendentemente dal fatto che il nome utente sia pubblico o meno. Se un utente malintenzionato intercetta la password in qualche modo, tramite un keylogger o un pacchetto sniffing, può anche intercettare il nome utente segreto.

Questo problema è meglio pensato in termini di usabilità. Vuoi che i tuoi utenti ricordino un indirizzo email come un nickname, un nome di accesso segreto e una password? Mantienilo semplice.

    
risposta data 12.05.2014 - 11:27
fonte
1

Anche se molti non saranno d'accordo, ritengo che un nome utente sia più sicuro per l'accesso di un indirizzo email:

1) Non c'è motivo per non hash il nome utente nel database nello stesso modo in cui dovresti hash la password, quindi l'argomento crack del database è moot

2) L'indirizzo email di una persona è praticamente di dominio pubblico. Inoltre, è già probabile nelle mani dei cattivi ... la tua cartella spam dovrebbe essere la prova di ciò. Due segreti sono meglio di uno.

3) Le persone devono essere incoraggiate a utilizzare un gestore di password in modo che non scelgano password deboli o nomi utente deboli. Se può essere facilmente ricordato, quanto può essere sicuro?

4) I siti che, purtroppo, richiedono e-mail come accessi sono un ottimo motivo per avere e-mail "di sola accesso" specifiche del sito che inoltrano alla posta elettronica effettiva. E ancora, un gestore di password può trattare questi come i nomi utente, automatizzando il compito di mantenere tutto dritto. Inoltre, se trascurano di acquisire la posta elettronica come campo separato, saprai con precisione chi ha fatto trapelare il tuo indirizzo email di accesso a chi.

5) Un nome utente, adeguatamente protetto, è potenzialmente più affidabile, in quanto le persone possono perdere il controllo di uno specifico indirizzo email.

    
risposta data 15.11.2016 - 23:48
fonte
0

Se usi HTTPS e altri meccanismi di sicurezza appropriati, in termini di sicurezza non ci sarà molto diverso. Ma se i nomi degli utenti sono troppo complessi, gli utenti possono provare a scriverli su note adesive e metterli sul desktop (probabilmente con password). Quindi vai con uno meno complesso.

Se è possibile utilizzare l'autenticazione a due fattori, ciò migliorerebbe notevolmente la sicurezza.

    
risposta data 12.05.2014 - 11:43
fonte
0

Vecchia domanda, ma poiché la domanda riguarda la sicurezza e non la comodità credo che a tutte queste risposte manchi un aspetto importante: attacchi di enumerazione . Sono d'accordo sul fatto che le password e / o un altro secondo fattore è ciò che viene utilizzato per autenticare gli utenti come utente2428118 menzionato in precedenza e non il nome utente / email, quindi non ho intenzione di discuterne affatto. Inoltre, in caso di violazione del database, né il nome utente né l'e-mail sono più o meno sicuri poiché sono entrambi archiviati in testo normale.

Tuttavia, un aspetto della sicurezza che nessuna di queste domande riguarda è nome utente / email enumerazione. Nella sicurezza delle applicazioni, il nostro obiettivo è ridurre al minimo o eliminare la conoscenza di un hacker che potrebbe aiutarli ad entrare nel sistema. Se riescono a determinare il nome utente o l'indirizzo email utilizzati per un account, tale account è meno sicuro di un account di cui l'hacker non è a conoscenza.

Se usiamo i nomi utente per l'autenticazione, abbiamo bisogno di un modo per dire a un utente che il nome utente desiderato è già acquisito quando si sta registrando. Questo può essere sfruttato da un hacker per determinare se esiste già un determinato nome utente. Questa è una cosa negativa perché se conoscono il nome utente, possono quindi tentare di accedere con le password più comunemente utilizzate da precedenti violazioni del database. Queste password comuni sono prontamente disponibili online.

Tuttavia, se invece utilizziamo indirizzi email per l'autenticazione, quando aggiungi un nuovo account e l'email esiste già, invia semplicemente un'email di recupero password all'utente anziché una nuova email di iscrizione. Tuttavia nell'interfaccia utente, è sufficiente dire all'utente di controllare il proprio indirizzo email per ulteriori istruzioni, ma non indicare se tale indirizzo è valido o meno.

E-mail

  • L'hacker può indovinare in base al tuo nome utilizzando [email protected] o altri indirizzi di uso comune (ad es. [email protected], [email protected], ecc.) o compilando il modulo web e utilizzando l'indirizzo nel risposta e-mail per tentare l'autenticazione. Tuttavia, gli utenti sono generalmente liberi di scegliere qualsiasi indirizzo email che desiderano, anche gli indirizzi personali, e gli utenti che accedono potrebbero non essere necessariamente affiliati o impiegati dal sito Web al quale si stanno collegando, quindi in questo caso non avrebbero una @company .com indirizzo e-mail che si collega al sito Web company.com.
  • Gli attacchi di enumerazione possono essere prevenuti.

Nome utente

  • A volte visualizzato online (ad esempio "This post was created by {{username}} on {{date}}" ) mentre le e-mail dovrebbero, si spera, non essere mai visualizzate in testo semplice.
  • Gli attacchi di enumerazione non possono essere prevenuti
  • Più vulnerabile agli attacchi di dizionario poiché le persone spesso scelgono nomi utente semplici (ad es. il loro nome).

Bonus: Detto questo, un altro (più difficile) modo in cui un hacker può determinare se un nome utente o un messaggio di posta elettronica esiste nel sistema sta tentando di accedere e guardare i tempi di risposta della pagina. Le migliori linee guida di sicurezza mostrano che vogliamo che le nostre password vengano sottoposte a hash con un hash lento, tuttavia se nel database non esiste un nome utente o un'e-mail, non dovremo verificare l'hash della password perché non ci sono utenti corrispondenti. Se il nostro hash richiede 100 ms per eseguire e la query del database richiede 5 ms, i tempi di risposta per una richiesta per un utente valido saranno, in media, 95 ms più lenti di un utente non valido. Il modo in cui mi aggiro è quello di cancellare sempre la password fornita, anche se l'utente non esiste nel database, o se l'utente esiste, quindi ho solo verificato l'hash nel database.

    
risposta data 02.03.2018 - 23:08
fonte

Leggi altre domande sui tag