Come richiesto, preparerò la mia risposta.
If a malicious user B want to block the user A he could try to log with A username's 4 times every 5 minutes. Then A couldn't log to the app.
Questo è il problema quando si bloccano gli account: non si sa se l'utente è effettivamente legittimo fino a quando non ha superato la schermata di accesso. Quindi non puoi supporre che l'utente A stia cercando di accedere all'account A. Se non è un problema per i siti web classici, può essere molto problematico per i webgames (posso bloccare un altro account prima di attaccarli, in modo che non possano difendersi da soli). / p>
Di solito, il motivo per cui il webmaster desidera bloccare gli account è:
I want to avoid a brute force
Ma se il tuo database viene violato, puoi eseguire un attacco offline e bypassare l'approccio anti-brute force per bloccare i conti.
Inoltre, secondo la mia esperienza, gli aggressori raramente forza brutale un account direttamente. Perché? Perché richiede un po 'di tempo per ottenere la password corretta (se è stata scelta bene). In questo modo, gli hacker procedono in un altro modo: elencano tutti gli account sul server e provano le password più utilizzate su ognuno di questi account per account. In qualche modo, invece di provare tutte le password su un account, provano una password su tutti gli account. Pertanto, il tuo sistema anti-brute-force è inefficiente.
IMO, un modo migliore per evitare la forza bruta è semplicemente effettuare il controllo dell'hashing più a lungo (1secondo) , utilizzando iterazioni sufficienti in modo che impieghi 1 secondo (o così) per controllo. In questo modo:
- Se un utente malintenzionato prende di mira un account, avrà bisogno di miliardi di miliardi di anni per violarlo se la password è stata scelta correttamente. Se fanno un attacco parallelo hudge, avranno ancora bisogno di miliardi di anni
- Dovresti già avere un po 'di attenuazione DDoS, quindi nel caso in cui un attacco richieda troppe risorse sul tuo server, allora sarai al sicuro (è un altro campo che i conti anti-brute-force) Ad esempio, puoi "stabilire la priorità" risorse, assegnandole prima agli utenti registrati e lasciando la metà dei rimanenti a quelli non registrati
- Se un utente malintenzionato tenta una password su tutti gli account, avrà comunque bisogno di molto tempo per provare i migliaia di account utente che hai
- Se il tuo database viene violato, l'attacco offline richiederà ancora molto tempo, sufficiente per permettere agli utenti di aggiornare le loro password
- È stateless, quindi non avrai problemi con la memorizzazione di chi ha effettuato un tentativo di accesso, su quale account, ecc.
- 1 secondo è abbastanza breve da essere notabile dagli utenti regolari