Non esiste una soluzione "migliore" adatta a tutti i sistemi. Ma sono d'accordo con Kamic: è una questione di equilibrio.
Vorrei indicare un punto debole qui. Se stai andando in modo più sicuro , puoi effettivamente rendere il tuo meno sicuro.
Sistema "Molto sicuro"
Sei paranoico, blocchi gli utenti per 3 tentativi di password sbagliati e chiedi loro di venire in ufficio con documenti cartacei, fare analisi del DNA e sbloccare solo dopo questa procedura affidabile. Impossibile hackerarlo!
Sì, lo sblocco è difficile e "costoso", ci vuole tempo, ma è una situazione molto rara e sbloccare 1-2 utenti in una settimana non è un problema né per te né per gli utenti.
Hacking "molto sicuro" sistema
Cosa succede se attaccato scriverà uno script semplice che eseguirà N tentativi di password sbagliati per ogni nome utente noto e lo eseguirà per alcune ore? Il tuo sistema è riuscito con successo! Hai migliaia di utenti, ma tutti sono bloccati, quindi non riescono a raggiungere il sistema, il telefono sta suonando tutto il tempo, gli utenti sono arrabbiati, gli utenti stanno subendo perdite. Solo questa situazione da sola è terribile e vale la pena di evitare qualsiasi meccanismo di protezione che possa portare a tale fallimento. Hai protetto la riservatezza, ma ne hai pagato la disponibilità.
Ma le cose possono andare anche peggio. Ora in una situazione così estrema, capisci che non puoi "manualmente" sbloccare tutti gli utenti. (invitalo nella tua stanza, verifica l'ID ...) E devi cambiare le regole e sbloccarle con una telefonata non verificata "mi dici che il tuo nome è John Doe? okay, sto sbloccando il tuo account, la tua password è 123456, per favore cambialo dopo il login ". Ora hai dato una password valida per l'aggressore tramite una telefonata.
In questo caso sarebbe molto meglio se ogni utente fosse bloccato solo per 1 ora per N tentativi di password errati. Questo è sufficiente per fermare la bruteforcing (non importa, se la password indovinerebbe 100 o 100 miliardi di anni), e non sarà un problema se l'attaccante proverà ad abusare di questo meccanismo.
Giusto modo
Per ogni situazione, dovresti considerare diversi scenari di attacco e modi per combatterlo. Se l'utente può facilmente sbloccarsi, è veloce e gratuito (non costa nemmeno un minuto di tempo) - quindi anche il blocco fisso (senza sblocco automatico) va bene.
Dovresti considerare le perdite per ogni modo (quanto perderai se l'utente malintenzionato applicherà la password bruteforce per 1-2 account? quanto perderai se l'attaccante bloccherà il 100% degli account?), quanto sarà difficile per l'attaccante e le probabilità di ogni tipo di attacco.
Il modo giusto in ogni situazione dipende da molte cose come il numero di utenti, quanto sono segreti i nomi utente (o tutti conoscono i nomi utente di tutti gli utenti, come "cat / etc / passwd" su unix), quanto è difficile accedere a sistema (è un sito pubblico o solo 10 dipendenti possono raggiungere questo sito intranet), quanto è anonimo l'aggressore e così via.
(Mi dispiace per il cattivo inglese.)