non riuscito Logica tentativi di accesso

1

Voglio aggiungere sicurezza all'accesso al sistema. Quindi ecco la mia idea:

Se un utente tenta di accedere con un nome utente valido ma una password non valida, contalo come tentativo di accesso fallito e memorizzalo nel database degli utenti per quell'utente specifico.

Dopo che X ha fallito i tentativi di accesso per quell'utente, prendi qualche azione specifica (es. captcha display). Tuttavia, quando quell'utente è in grado di accedere con successo, reimposta i tentativi di accesso nel database.

Questa logica è efficace?

    
posta jay 22.05.2014 - 10:54
fonte

3 risposte

6

Il problema è che questo aiuta solo se un account particolare viene attaccato. Ma invece di provare 100 password su un account, un utente malintenzionato potrebbe anche provare una password comune su 100 account. Per evitare ciò, è inoltre necessario monitorare il numero totale di accessi non riusciti e iniziare a visualizzare CAPTCHA quando il numero diventa eccezionalmente alto.

Per facilità d'uso, gli accessi falliti dovrebbero scadere automaticamente dopo un po '. Non ha senso mantenere il contatore per più di, diciamo, 24 ore.

Ultimo ma non meno importante, fai attenzione con le condizioni di gara quando lo realizzi. Molte persone verificano prima il numero di accessi non riusciti e quindi incrementano il contatore se necessario. Ma ciò consente a un utente malintenzionato di inviare un numero arbitrario di richieste simultanee tra il controllo e l'incremento e ogni volta che il server continuerà a "vedere" il vecchio contatore. È necessaria una singola query in cui si incrementa il contatore e si ottiene il nuovo valore allo stesso tempo, quindi è necessario verificare tale valore. Diversi sistemi di database hanno diverse tecniche per questo. In PostgreSQL, puoi utilizzare una query UPDATE con una clausola RETURNING . In MySQL, puoi usare una query UPDATE con l'espressione di incremento avvolta in LAST_INSERT_ID() e quindi ottenere il valore incrementato con SELECT LAST_INSERT_ID() . Tieni presente che non puoi effettuare una semplice query SELECT dopo l'aggiornamento, perché il contatore potrebbe già essere aumentato nel frattempo.

    
risposta data 22.05.2014 - 13:04
fonte
2

Questo è l'approccio standard.

Dovresti contare un ID o una password errati e non dovresti dire loro cosa è sbagliato.

Potresti anche considerare di creare un ritardo crescente tra i tentativi consentiti.

    
risposta data 22.05.2014 - 11:11
fonte
1

Sì, è quasi tutto il login.

Devi avere il captcha dopo diverse volte login non valido per prevenire attacchi brute force o se hai bisogno di più sicurezza, potresti aver bisogno di bloccare l'accesso se l'utente ha tentato troppi accessi non validi.

Se possibile, dovresti registrare ogni tentativo di accesso, non solo contare su quanti tentativi di accesso sono stati poi ripristinati. Questo registro ti aiuterà a capire e rintracciare se c'è una grave violazione del sistema.

Inoltre, potresti già saperlo. Utilizzare l'hash unidirezionale più sale per memorizzare la password nel database.

    
risposta data 22.05.2014 - 12:10
fonte

Leggi altre domande sui tag