2009-02-24 6 views
15

Ovviamente una sorta di meccanismo per limitare i tentativi di accesso è un requisito di sicurezza. Mentre mi piace il concetto di un tempo esponenzialmente crescente tra i tentativi, quello che non sono sicuro di memorizzare le informazioni. Sono anche interessato a soluzioni alternative, preferibilmente non includendo i captcha.Il modo migliore per limitare (e registrare) i tentativi di accesso

Suppongo che un cookie non funzioni a causa del blocco dei cookie o della cancellazione automatica, ma le sessioni funzionerebbero? O deve essere memorizzato in un database? Essere inconsapevoli di quali metodi possono/vengono utilizzati, quindi semplicemente non so cosa sia pratico.

+0

vedere anche: http://stackoverflow.com/questions/479233/questo-è-il-best-distribuito-braccio-punto-opposto-modello – Kzqai

risposta

13

Utilizza alcune colonne nella tabella utenti "failed_login_attempts" e "failed_login_time". Il primo incrementa per login fallito e si reimposta in caso di accesso riuscito. Il secondo consente di confrontare l'ora corrente con l'ultimo errore.

Il tuo codice può utilizzare questi dati nel db per determinare quanto tempo ci attende per bloccare gli utenti, di tempo tra gli accessi consentiti ecc

+12

Inoltre, qualcosa che ho scoperto, è necessario memorizzare tentativi di accesso non riusciti per nomi utente non validi. Se blocchi mai solo tentativi falliti su nomi utente validi, allora stai rivelando quali nomi utente sono validi e che è un no-no. – Andrew

+1

Mi piace archiviare gli errori in base a due criteri: se è stato utilizzato un nome utente valido, contare un errore per il nome utente e l'IP, altrimenti conteggiare solo un errore per l'IP. Se un account specifico viene attaccato, bloccherà l'account indipendentemente dall'IP specifico e ogni singolo IP abusivo ottiene un blocco a livello di sito nel processo. È anche importante memorizzare un tempo di scadenza esplicito per i blocchi e rinnovare la scadenza del blocco per ogni tentativo. –

6

Supponendo che Google abbia eseguito i test di usabilità necessari (non un'ipotesi ingiusta) e deciso di utilizzare i captcha, suggerirei di seguirli.

timeout L'aumento è frustrante quando io sono un vero e proprio utente e ha dimenticato la password (con tanti siti web e le password associate che accade molto, soprattutto per me)

+1

Sono d'accordo con questo. Per * servizi non essenziali * l'aumento dei timeout è incredibilmente frustrante. –

3

tentativi memorizzazione nel database è il migliore soluzione IMHO dal momento che ti dà i record di controllo dei tentativi di violazione della sicurezza. A seconda della domanda, questo può o non può essere un requisito legale.

Registrando tutti i tentativi non validi è anche possibile raccogliere informazioni di livello superiore, ad esempio se le richieste provengono da un indirizzo IP (ad esempio qualcuno/cosa sta tentando un attacco di forza bruta) in modo da poter bloccare l'indirizzo IP. Questo può essere MOLTO informazioni utili.

Dopo aver determinato una soglia, perché non costringerli a richiedere l'e-mail da inviare al loro indirizzo e-mail (cioè simile a 'Ho dimenticato la mia password'), o si può andare per l'approccio CAPCHA.

1

Sapete quale ID utente viene colpito, mantenete un flag e quando raggiunge un valore di soglia semplicemente smettete di accettare qualsiasi cosa per quell'utente. Ma questo significa che memorizzi un valore di dati extra per ogni utente.

Mi piace il concetto di un tempo esponenzialmente crescente tra i tentativi, [...]

Invece di utilizzare in maniera esponenziale aumentando il tempo, si potrebbe effettivamente avere un ritardo randomizzato tra i successivi tentativi.

Forse se si spiega quale tecnologia si sta utilizzando le persone qui sarà in grado di aiutare con esempi più specifici.

1

Memorizzare le informazioni lato server. Ciò consentirebbe anche di difendersi dagli attacchi distribuiti (provenienti da più macchine).

1

È possibile, come per dire blocco il login per qualche tempo diciamo per esempio, a 10 minuti dopo 3 tentativi di fallimento per esempio. Il tempo esponenzialmente crescente mi sembra buono. E sì, memorizza le informazioni nella sessione lato server o nel database. Il database è migliore Nessun cookie aziendale poiché è facile da manipolare dall'utente.

Si consiglia inoltre di associare tali tentativi all'adirizzo IP del client poiché è possibile che un utente valido ottenga un messaggio bloccato mentre qualcun altro sta cercando di indovinare la password dell'utente valido con tentativi di errore.

2

Lock out La politica è tutto a posto, ma c'è un equilibrio.

Una considerazione è pensare al consruction dei nomi utente - indovinabile? Possono essere enumerati?

Ero su un Test penna esterna per un dotcom con un portale Employee che serviva Outlook Web Access/Intranet Services, alcune App. È stato facile enumerare gli utenti (il team Exec/Managament sul sito web stesso e attraverso Google, Facebook, LinkedIn, ecc.). Una volta ottenuto il formato di accesso al nome utente (nome e cognome immessi come una stringa singola), ho avuto la possibilità di escludere centinaia di utenti a causa dei loro 3 avvertimenti e criteri.

1

Le risposte in questo post danno priorità alle soluzioni basate su database perché forniscono una struttura di record che rende conveniente la logica di controllo e di blocco.

Mentre le risposte qui risolvono gli attacchi indovinatori sui singoli utenti, una delle principali preoccupazioni di questo approccio è che lascia il sistema aperto agli attacchi Denial of Service. Qualsiasi richiesta dal mondo dovrebbe non lavoro di database di trigger.

Uno strato di sicurezza alternativo (o aggiuntivo) deve essere implementato in precedenza nel ciclo req/res per proteggere l'applicazione e il database dall'esecuzione di operazioni di blocco che possono essere costose e non necessarie.

Express-Brute è un esempio eccellente che utilizza il caching di Redis per filtrare le richieste maligne consentendo al tempo stesso quelle oneste.