Ho posto questa domanda prima su Stack Overflow, ma è stato suggerito che la sicurezza delle informazioni sarebbe stata un posto migliore per questo (piuttosto ovvio a posteriori).
Ho una tipica procedura di autenticazione dei moduli di applicazione Web con due passaggi:
- Passaggio 1: richiesta di nome utente e password
- Passaggio 2: richiedi alcuni caratteri (ad esempio, 2 °, 5 ° e 8 °) da una frase segreta
Devo autenticare il nome utente e la password prima di andare al passaggio 2? O dovrei raccogliere tutte e tre le informazioni (nome utente, password e caratteri) e controllarle alla fine?
La maggior parte dei siti web che ho visto controlla il nome utente e la password e, se non si autenticano, non chiedono mai i caratteri. D'altra parte, si potrebbe sostenere che controllando tutto alla fine e se non corrispondono, mostrando un messaggio di errore che non spiega quale bit fallire sarebbe più sicuro. Ciò fornisce meno informazioni come la visualizzazione di "Nome utente o password errati" (senza specificare quale) in una semplice autenticazione in 1 fase.
Il problema con il secondo approccio (oltre ad essere meno user-friendly) è che il Passaggio 2 richiede l'ottenimento di un utente valido nel Passaggio 1, altrimenti è difficile conoscere la lunghezza della frase segreta per chiedere caratteri validi (non c'è punta a chiedere il decimo carattere se la frase è lunga solo 9 caratteri). L'applicazione dovrebbe anche conservare la password in modo sicuro tra i due passaggi.
Quindi qual è il migliore? C'è un terzo approccio che dovrei prendere in considerazione?