È sicuro mostrare all'utente un messaggio se l'account è bloccato

9

Sto lavorando su un'applicazione web, la sicurezza è una priorità. Quindi, se un utente non è riuscito ad accedere più di 3 volte, l'account verrà bloccato. Devo visualizzare un messaggio all'utente che dice "il tuo account è stato bloccato"? Sarebbe utile per l'utente malintenzionato ottenere il nome utente.

    
posta raj 17.08.2013 - 06:39
fonte

4 risposte

7

Devi dire all'utente che l'account è stato bloccato, altrimenti non vedo come gestiresti una tale situazione senza visualizzare un messaggio direttamente nell'applicazione web. Ovviamente, è molto probabile che tu gli invii una e-mail con alcuni passaggi per sbloccare il suo account ma, comunque, devi notificare all'utente all'interno dell'applicazione che gli hai inviato una e-mail.

Ora, considerando la tua preoccupazione principale, ovvero che un utente malintenzionato potrebbe creare un elenco di nomi utente registrati sul tuo sito web, esiste una soluzione per mitigare questo problema.

Tentativi di tracciamento da parte di cookie / campi nascosti / voci del database

Ogni volta che un utente tenta di accedere utilizzando un nome utente inesistente, è possibile tenere traccia del tentativo fallito memorizzando le informazioni in un cookie, in un campo nascosto o anche direttamente nel database. In questo modo, se blocchi un account reale dopo 3 tentativi falliti, puoi tenere traccia dei tentativi falliti (che non sono veri tentativi falliti perché il nome utente non esiste realmente) e visualizzare il messaggio di blocco esattamente come in un vero situazione.

Il modo più trasparente ed efficiente per implementare questo sarebbe inserire i tentativi falliti in un database perché l'utente può sempre modificare i campi nascosti ei cookie, che potrebbero alla fine aiutarlo a capire il tuo piccolo stratagemma. Inoltre, potrebbe essere difficile tenere traccia dei tentativi di username inesistenti se l'utente prova molti nomi utente utilizzando cookie e campi nascosti. Tuttavia, nel database, è possibile semplicemente registrare l'IP dell'utente, il nome utente inesistente e infine la quantità di tentativi falliti che indicano se è necessario visualizzare il messaggio di blocco falso o meno alla propria applicazione Web.

Potresti anche non voler filtrare i tentativi solo tramite IP, nel caso in cui l'aggressore utilizzi un proxy e verifichi lo stesso nome utente e si accorga che gli è occorso di nuovo, ad esempio, 3 tentativi di bloccare l'account. Di nuovo, potrebbe capire il tuo stratagemma in questo modo.

Ma hai davvero bisogno di una tale protezione?

Prima di implementare una tale protezione, prenditi del tempo per pensare se è veramente necessario per la tua applicazione web. Una situazione in cui ciò sarebbe completamente inutile è un sito Web che dispone di un forum in cui gli utenti eseguono il login utilizzando lo stesso nome utente di quello visualizzato sul suddetto forum. Ovviamente, un utente malintenzionato potrebbe creare facilmente un elenco degli utenti registrati semplicemente sfogliando le pagine.

Accedi utilizzando l'indirizzo e-mail

Hai pensato di utilizzare l'indirizzo e-mail dell'utente per collegarti alla tua applicazione web, se possibile? È molto meno probabile che qualcuno tenterà di creare una lista di indirizzi e-mail poiché ci sono molte più possibilità rispetto ai nomi utente (gli utenti tendono a scegliere nomi utente semplici e tipici come "Simon" quando è disponibile. l'indirizzo di posta elettronica è più difficile, in quanto vi sono molti possibili servizi di posta elettronica, supponendo che abbia scelto nuovamente il nome utente "Simon" (ad es. [email protected], [email protected], [email protected], ecc.)) .

    
risposta data 17.08.2013 - 07:37
fonte
10

Mentre la risposta di @ Simon è eccellente, vorrei aggiungere un punto in più. Non bloccare account utente a causa di tentativi di accesso falliti .

Così facendo, stai introducendo una grande vulnerabilità DoS nella tua applicazione. Qualsiasi utente malintenzionato può semplicemente bloccare un numero elevato di utenti ripetutamente fallendo la procedura di accesso. Introdurrà anche un grande mal di supporto perché gli utenti non falliranno il processo di login. A volte ripetutamente. Ricorda il terzo aspetto del triangolo della CIA, disponibilità. La tua applicazione è inutile se nessuno può usarla.

Invece, ciò che dovresti fare è limitare la quantità di tentativi di accesso consentiti. Introdurre un periodo di "time-out" invece di bloccare permanentemente l'account dell'utente in attesa di un'azione sulla parte dell'utente. Ciò bloccherà sufficientemente gli attacchi bruteforce online mantenendo le e-mail di supporto e le chiamate a un livello sano.

    
risposta data 17.08.2013 - 07:46
fonte
6

Se stai ricevendo molti tentativi di password, devi bloccare l' utente malintenzionato , non la vittima . Questo dovrebbe essere ovvio, ma è comunque un problema abbastanza comune.

Prima di tutto, rallenta l'attacco. Dopo anche un singolo tentativo di password errata, l'IP che ha inviato il tentativo non dovrebbe essere in grado di inviarne un altro finché non sono passati diversi secondi. Puoi mascherarlo dal lato del browser visualizzando un messaggio di "autenticità, attendi ...". Ma sul backend, se si ottiene più di un tentativo in un singolo N -secondo span da un dato IP, quindi si restituisce un messaggio di errore che informa l'attaccante che non si sta nemmeno andando controlla per vedere se la sua ipotesi era giusta.

Per i punti bonus, richiedono N secondi di silenzio, non solo N secondi dalla prima ipotesi. In questo modo, battere sul server estende solo il timeout.

In secondo luogo, blocca gli IP offensivi, non gli account offesi. È possibile estendere facilmente la soluzione dal punto precedente per aumentare il tempo di attesa dopo i tentativi falliti di N . Quindi, ad esempio, 10 tentativi e ottieni altri 15 minuti nella casella di rigore. Puoi persino mostrare un conto alla rovescia amichevole sulla tua pagina web. È anche utile dire alle persone "3 tentativi rimasti" in modo che riflettano su ciò che scrivono e non si limitino a ignorare password errate finché non vengono bloccate.

In terzo luogo, rispondi agli attacchi rendendoli meno accessibili ai bot. Se un singolo account riceve attenzione da centinaia di IP, cambi le cose per rompere i bot. Crea una sfida CAPTCHA, per esempio. Gli utenti reali potrebbero trovarlo fastidioso, ma non quasi così fastidioso da essere bloccato dal tuo account.

    
risposta data 17.08.2013 - 09:47
fonte
1

La mancata visualizzazione del messaggio di errore non aggiunge molto valore alla sicurezza, mentre è una cattiva esperienza utente, perché è molto comodo per l'utente sapere che cosa non va con l'input di accesso. Se il tuo sistema richiede un'elevata sicurezza, puoi utilizzare un sistema di cast di timeout e una cornice di password migliore.

    
risposta data 17.08.2013 - 10:09
fonte

Leggi altre domande sui tag