Best practice per i metodi di gestione delle identità in merito alla conferma dell'esistenza dell'utente

3

Sto lavorando su un nuovo sito che utilizza l'identità di asp.net per registrare gli utenti. Sto facendo uso di indirizzi e-mail come nomi utente e l'indirizzo e-mail deve essere confermato prima che l'utente possa accedere.

Ho lavorato in base alle specifiche e alla nostra politica di gestione delle password dell'organizzazione. La combinazione del 2 mi permetterebbe di fornire vari messaggi dettagliati a un utente durante l'esecuzione di azioni correlate all'account, ad esempio:

  • Quando si seleziona "Password dimenticata" per un nome utente non esistente, viene visualizzato il messaggio: Questo nome utente non esiste.

Ho pensato che la pratica migliore sarebbe non confermare o negare se l'indirizzo e-mail esiste. Per questo motivo voglio mostrare il messaggio di successo: "Le istruzioni su come procedere sono state inviate all'indirizzo email fornito" anche se l'utente fornito non esiste.

Applicare questo principio ad altre azioni correlate all'account è un po 'complicato, però. Per esempio; in base alle specifiche quando si seleziona Invia nuovamente l'e-mail di conferma per un account già confermato, dovrei mostrare il messaggio: "Questo account è già attivato". Questo proprio lì mostra qualsiasi altro utente anonimo che l'account esiste. Ora, se mostro il messaggio di successo, l'utente potrebbe sedersi e attendere l'email, il che significa che dovrei effettivamente mandargli una email. Se questa e-mail dovesse essere la normale e-mail di attivazione, o una che indichi: "Il tuo account è già attivato. Apri il sito ed esegui l'accesso."

Un altro problema riguarda la registrazione. Se mostro un messaggio generico di "tentativo di registrazione non valido" durante la registrazione con un account esistente, il mio service desk potrebbe essere inondato di chiamate da utenti arrabbiati. (OK, probabilmente non allagato, ma dopo il primo il service desk scopre che l'utente li ha contattati a causa di un messaggio di errore generico per un problema specifico e identificato, mi chiederanno, o qualsiasi sviluppatore, di modificare il messaggio di errore per mostrare l'utente qual è il problema) Ancora una volta, però, se mostro all'utente un messaggio che indica che l'account esiste già, allora siamo tornati dove abbiamo iniziato.

Inoltre, quando un utente si registra 5 volte in modo errato, devo bloccare il suo account. Se gli dico che il suo account è bloccato, questo è un altro mezzo con cui un individuo anonimo può confermare se il nome utente esiste o meno.

Ho cercato un po 'di letteratura online con le linee guida relative a queste interazioni, ma non ho trovato molto.

    
posta Carel 19.05.2015 - 08:52
fonte

2 risposte

2

Sì, hai ragione. È possibile inviare un'e-mail in ciascun caso all'indirizzo inserito in cui sono riportati i casi di successo / fallimento e una risposta generica potrebbe essere visualizzata dall'utente nella pagina di risposta.

Questo è noto come comunicazione tramite un canale "fuori limite". Quindi invii sempre l'e-mail, ma è l'e-mail stessa a spiegare la situazione e la pagina HTML chiede all'utente di controllare il proprio account e-mail.

Vedi la mia altra risposta qui per ulteriori informazioni su questo e su come potresti combinare qualsiasi registrazione utente con dimenticata funzionalità della password.

Una cosa da tenere a mente è che devi inviare la stessa risposta dall'applicazione, indipendentemente dal fatto che l'account esista o meno. Ciò significa esattamente le stesse intestazioni HTTP e il corpo HTML - non solo una risposta che appare la stessa a prima vista.

Also, when a user logs in 5 times incorrectly, I'm to lock out his account.

Devi anche dare la stessa risposta se un utente malintenzionato riesce a "bloccare" un account inesistente. Ad esempio, fingere l'accesso all'account con l'indirizzo email inesistente è stato bloccato.

Un approccio migliore che prevenga anche eventuali attacchi DoS a un utente (da parte di un altro utente che nega l'accesso bloccando intenzionalmente un account) sarebbe la limitazione delle risposte. Ad esempio, la risposta HTTP è sempre più ritardata, il che interromperebbe qualsiasi attacco automatico per indovinare la password, ma non bloccherebbe l'utente.

es. Il primo tentativo errato su un nome utente dà un secondo di ritardo. Secondo tentativo errato dà due secondi. Espandi questo a un valore ragionevole per la tua applicazione. per esempio. un massimo di 16 secondi. Implementalo attraverso i thread per prevenire attacchi paralleli e avrai notevolmente rallentato un attaccante senza alcun rischio di DoS sull'utente valido.

but after the first one the service desk discovers that the user contacted them due to a generic error message for a specific and identified issue, they will request me, or any developer, to amend the error message to show the user what the problem is

Dovresti usare un sistema di gestione dei casi (se non lo sei già). Contrassegna semplicemente questi bug come "non verranno implementati" perché hanno implicazioni sulla sicurezza.

    
risposta data 21.05.2015 - 14:43
fonte
4

Ho pensato che la pratica migliore sarebbe non confermare o negare se l'indirizzo e-mail esiste. Per questo motivo voglio mostrare il messaggio di successo: "Le istruzioni su come procedere sono state inviate all'indirizzo email fornito" anche se l'utente fornito non esiste.

Sì, questo è il modo corretto per farlo. Un messaggio migliore sarebbe "Se questo indirizzo e-mail esiste, le istruzioni su come procedere sono state inviate all'indirizzo e-mail fornito". È più user-friendly senza dare a un intruso informazioni sul fatto che l'account esista.

Questa e-mail dovrebbe essere la normale e-mail di attivazione, oppure una che recita: "Il tuo account è già attivato. Apri il sito e accedi."

Il secondo.

Se mostro un messaggio generico di "tentativo di registrazione non valido" quando registri con un account esistente, il mio service desk potrebbe essere inondato di chiamate da utenti arrabbiati.

In questo caso, dovresti mostrare sullo schermo un messaggio "Le informazioni sono state inviate all'indirizzo email fornito. Segui le istruzioni." ed e-mail all'utente "Qualcuno (forse tu) ha provato a registrarsi con questo account e-mail, ma esiste già un account associato a questo indirizzo email."

Inoltre, quando un utente si registra 5 volte in modo errato, devo bloccare il suo account.

Questo è più complicato che potrebbe essere usato per un DoS (sebbene, poiché l'attaccante non sa se l'account esiste o meno, può solo provare indirizzi email casualmente). È necessario disporre di un secondo metodo di autenticazione (ad es. Un numero di cellulare o un secondo indirizzo email) in cui è possibile avvisare l'utente "Il tuo account è stato bloccato a causa di 5 tentativi di autenticazione falliti" e consentirgli di eseguire nuovamente l'autenticazione in un altro modo, forse con un nonce. EDIT: dovrebbe essere usato anche per reimpostare la password.

Un modo più semplice per mitigare gli accessi errati sarebbe negare l'accesso per 24 ore, invece di bloccare l'account.

    
risposta data 19.05.2015 - 09:46
fonte

Leggi altre domande sui tag