Ci sono due aspetti in questo; il primo, come hai detto, è prevenire gli attacchi di forza bruta.
A questo scopo, dovrebbe essere fatto un numero qualsiasi di tentativi - 3, 5, 20, 2000 ... con una corretta politica delle password (lunghezza + complessità + ...) fornendo uno spazio sufficiente per la chiave, qualsiasi tipo di limitazione (numero X di tentativi all'ora) assicurerà che la forzatura bruta dell'intero spazio richiederà alcuni decenni. (Fai i conti).
Anche se - e questo dovrebbe essere un requisito - il blocco è solo temporaneo e dopo un breve periodo di tempo si sblocca automaticamente.
Quindi, il numero di tentativi prima del blocco è arbitrario.
Tuttavia, qui è in gioco un altro problema, più sottile e non matematico:
Semplicemente non ha senso che un singolo utente inserisca ripetutamente un errore password 2000 volte di seguito.
Cioè, se scegli arbitrariamente 2000, sai molto prima che questo NON è un utente legittimo. Quindi, si tratta davvero di ciò che ha senso per gli affari e di un compromesso di analisi del rischio incentrato sul business.
Penso che storicamente, il compromesso fosse più inclinato verso il lato del rischio: poiché le password erano più brevi e meno complesse, la differenza di 3 o 10 era maggiore. Inoltre, le persone avevano meno password, quindi erano più facili da ricordare ... E gli utenti in generale erano più tecnicamente esperti.
Al giorno d'oggi, tre non hanno davvero senso, considerando l'impatto sul business. È davvero una questione di ciò che ha senso per la tua app, quali tipi di utenti, quanto spesso accedono, ecc. Di solito consiglio di capire quanti tentativi falliti e legittimi sono probabili, quindi raddoppialo.
( Come menzionato da @realworldcoder, PCI ha scelto arbitrariamente sei e se sei soggetto a PCI non hai molta decisione qui. Altrimenti, scegli un numero che abbia senso per tu.)