Riservatezza. Sembra che tu stia cercando di impedire a un utente malintenzionato di provare un particolare indirizzo email per vedere se esiste nel tuo database. Tuttavia, il tuo schema ha un buco: in realtà non lo raggiunge.
Dato un indirizzo, ad esempio [email protected]
, l'utente malintenzionato può provare ad accedere con quell'indirizzo e-mail 6 volte (usando una password improbabile). Quindi, l'utente malintenzionato può provare ad accedere nuovamente.
-
Se l'autore dell'attacco riceve una risposta Invalid e-mail address or password.
, l'utente malintenzionato può dedurre che questa email non esiste nel tuo database.
-
Se l'autore dell'attacco riceve un User has been locked out due to excessive invalid logins.
, l'utente malintenzionato può dedurre che questa email esiste nel tuo database.
Integrità. Il tuo metodo di convalida delle password sembra soddisfacente e dovrebbe impedire a un utente malintenzionato di effettuare una ricerca nel dizionario sulla password di un particolare utente.
Non impedirà a un utente malintenzionato di eseguire un numero limitato di tentativi su un numero elevato di password degli utenti. Supponiamo che un utente malintenzionato possa in qualche modo elencare un insieme di indirizzi e-mail che hanno un accesso con il tuo servizio (magari con una ricerca Web intelligente o sfruttando la violazione di riservatezza sopra o qualcosa del genere; non so se questo sia effettivamente possibile nel tuo caso ma esploriamo le conseguenze se lo è). Quindi un utente malintenzionato può eseguire iterazioni su tutti questi account e fare 5 ipotesi sulla password per ciascun account.
Ricerca recente ha rilevato che un utente malintenzionato può effettuare 10 tentativi per ciascun account sarà in grado di compromettere circa l'1% degli account. Estrapolando, possiamo aspettarci che nella tua situazione, un utente malintenzionato sia in grado di compromettere circa lo 0,5% degli account, effettuando 5 tentativi sulla password per ciascun account di cui è a conoscenza l'autore dell'attacco.
È possibile rendere più difficile questo tipo di attacco induttivo tenendo traccia del numero di tentativi di accesso non riusciti per ogni indirizzo IP e bloccando temporaneamente gli accessi dagli indirizzi IP che hanno un numero elevato di tentativi di accesso non riusciti. Tuttavia, questa non è una difesa perfetta (un attaccante con una botnet può facilmente aggirare questo).
Disponibilità. Sarebbe facile per un utente malintenzionato bloccare un utente mirato: tutto ciò che l'utente malintenzionato deve fare è provare ad accedere 6 volte con una password improbabile, e ora quell'utente non essere in grado di accedere senza contattare il team di supporto. Questo potrebbe essere un rischio accettabile. La buona notizia è che se ciò accade frequentemente, lo saprai e in quel momento puoi mettere in atto delle difese.
Soluzioni standard. Hai chiesto se ci sono soluzioni standard. Per quanto ne so, non ci sono soluzioni standard. Tuttavia, in un filone correlato, potreste essere interessati a questo documento accademico, che cerca di evitare l'uso di utenti popolari: se troppi altri utenti hanno scelto la stessa password, i nuovi utenti non sono autorizzati a utilizzarlo. Il documento ha alcune strutture dati intelligenti per assicurarsi che questo non crei nuovi problemi di sicurezza.