Se la limitazione della velocità di accesso è implementata correttamente, non ci sono aspetti negativi, e dovrebbe essere usata con o senza 2FA (e in effetti con i tentativi 2FA stessi). E blocco account è non il modo corretto per limitare i tentativi di accesso.
Limitare la velocità significa limitare il numero di tentativi che una determinata fonte può effettuare. In genere questo significa un dato indirizzo IP, anche se è possibile definire "fonte" comunque ha senso nella propria situazione.
Ci sono davvero tre tipi di attacchi che stai cercando di difendere da qui:
(a) L'hacker conosce la password - in questo caso i blocchi non saranno d'aiuto
un po '.
(b) La password è facilmente intuibile, come "123456" o "passw0rd" o "zxcvbn". Anche in questo caso, i blocchi degli account non saranno utili perché questi aggressori non tentano più di 5 o 10 password al massimo prima di passare al prossimo account. Spesso ne proveranno solo uno. Devi bloccare l' attacker , non l'account .
(c) L'utente malintenzionato sta effettuando un determinato viaggio su un singolo account ad alto valore e proverà l'intero dizionario e poi alcuni. La password potrebbe non essere facile da indovinare, ma l'aggressore ha tutto il mese.
Non c'è molto che possiamo fare sulla condizione (a) sopra, sebbene 2FA possa aiutare. La condizione (b) è estremamente comune mentre (c) è un po 'più rara perché il tasso di successo è così basso. Ma, cosa importante, entrambi possono essere vanificati rallentando l'aggressore.
Idealmente questo non significa un limite rigido di 15, e quindi aspetti 10 minuti. Idealmente, fai un back-off esponenziale. Ciò significa che dopo 2 tentativi, si attende diversi secondi. Dopo il terzo, aspetti ancora un po '. E poi più lungo dopo il quarto e così via. Il limite viene applicato nel back-end e nel front-end si utilizza una logica lato client come un timer in javascript per impedire all'utente di inviare tentativi durante il periodo di attesa.
Ho spiegato questa tecnica qui diverse volte, quindi non approfondirò i dettagli. Ma la cosa importante è che è semplice da costruire, non disturba notevolmente gli utenti legittimi, ma fa funziona molto bene contro determinati attaccanti. Rallentandoli, si imposta in modo efficace un limite rigido al numero di tentativi che possono effettuare in un determinato intervallo di tempo, ma si riduce gradualmente il limite tra i tentativi. E ancora meglio, è possibile rilevare quali utenti continuano a inviare tentativi durante il periodo di attesa, che li contrassegna come utilizzando un software specializzato per aggirare il limite di velocità del client. Cool!
Se imposti le cose in questo modo, non c'è motivo di disabilitare la limitazione della velocità. Non ha alcun inconveniente, è in gran parte invisibile agli utenti e offre una ragionevole difesa in prima linea contro gli aggressori a forza bruta.
Questo lascia solo lo scenario di un attacco distribuito contro un singolo accesso da una botnet di grandi dimensioni. Questo è abbastanza raro da non accadere mai per la maggior parte dei siti, ma è abbastanza semplice da rilevare e indirizzare, quindi lo lascerò come esercizio al lettore.