È un consiglio comune restituire "Nome utente o password errati" invece di "Nome utente inesistente" se il nome utente specificato non esiste e "Password errata" quando il nome utente esiste ma la password è errata.
Il motivo generalmente citato è che non si vuole fornire a un utente malintenzionato la conoscenza dell'esistenza di un nome utente, per prevenire attacchi online di forza bruta.
Tuttavia, se il nome utente è utilizzato per l'accesso, deve essere univoco e, pertanto, è necessario informare l'utente che il nome utente scelto viene preso mentre sta creando un account. Pertanto, un utente malintenzionato può facilmente determinare se esiste un nome utente anche se si dice "Nome utente o password errati" al momento del login.
Tuttavia, anche se non esiste alcuna pagina di registrazione o vengono prese altre misure per oscurare l'esistenza di nomi utente durante la registrazione, questa raccomandazione non ha ancora senso. I nomi utente non sono progettati per essere segreti. Molte persone riutilizzano i nomi utente e sono facili da trovare. E mantenerli segreti migliora solo la sicurezza, in quanto aumenta la dimensione totale del tuo segreto, che può essere ottenuto con password più lunghe richieste.
Inoltre, esistono modi migliori per prevenire gli attacchi di forza bruta in linea rispetto ai segreti più lunghi. Limita la velocità degli utenti all'accesso, che un algoritmo hash della password correttamente lento come bcrypt fa già implicitamente o che prevede un timeout dopo molti tentativi errati, risolve questo problema molto meglio di quanto non faccia un segreto più lungo.
C'è qualcos'altro che mi manca? Anche su questo sito vedo persone che difendono questa pratica, ma devo ancora vedere una ragione che non è risolta meglio con altri metodi.
Modifica: come follow-up, se questa raccomandazione non è davvero utile, perché è ancora comune? E da dove viene?