2012-02-05 22 views
5

Ho cercato questo negli ultimi 2 giorni dopo aver implementato il mio sistema per vietare troppi tentativi. Ma non ho trovato la risposta corretta che sto cercando. Che praticamente è, qual è il modo migliore per implementarlo?Il modo migliore per implementare il divieto dopo troppi tentativi di accesso

Attualmente l'ho implementato tramite un divieto IP, se lo stesso IP effettua consecutivamente un errore di accesso 10 volte, l'IP è vietato per 30 minuti dalla possibilità di accedere, possono navigare ancora sul sito. Tuttavia, se ciò si è verificato in un'area ad alta densità di popolazione, come un campus universitario, questo non bloccherebbe in modo efficace l'intera scuola dall'accedere?

Quindi c'è un modo migliore per farlo, che non usa gli indirizzi IP? Stavo pensando che potrei farlo con i cookie, ma l'utente che cerca di forzare un account può semplicemente cancellare i loro cookie ogni 10 tentativi.

+0

Si dovrebbe ri-utilizzare un framework di autenticazione esistente, quando possibile, perché, in realtà, è complesso. Ad esempio, dai un'occhiata a https://github.com/delight-im/PHP-Auth che è sia agnostico che indipendente dal database. Fa strozzatura, che è quello che vuoi, automaticamente. – caw

risposta

4

Un approccio che ho seguito una volta è simile a quello che ho incontrato sulla pagina di e-banking della mia banca. Proibisce ulteriori accessi per un numero crescente di volte per ogni conto, ad esempio 5 tentativi, dove si attende 10 secondi, 1 minuto, 5 minuti, 15 minuti, quindi 30 minuti per esempio. Un utente malintenzionato di solito si rivolge a un account specifico. Ci dovrebbe anche essere una regola globale applicata per indirizzo IP, che blocca l'accesso dopo un certo numero di tentativi, che deve essere maggiore di 5, ad esempio 10. Oltre a entrambe le regole, è possibile confrontare browser e cookie ecc. Per aumentare la tolleranza.

+1

il problema con questo ancora, è che blocca tutti gli utenti su quel IP e dà loro tempi di attesa in aumento, che è lo stesso problema che ho già con l'implementazione che sto usando. – JimmyBanks

+0

Intendo aumentare i tempi di attesa per l'account di destinazione, ma non per gli altri. Puoi anche valutare i cookie il più a lungo possibile. Se non ci sono cookie da tracciare, possono essere prese altre misure. Un attacco bruteforce puro senza informazioni client appropriate può essere bloccato solo da IP o parzialmente da IP: porta di una connessione persistente. – Sam

+0

oh capisco cosa intendi, sì sarebbe abbastanza efficace, avrei dovuto pensarci prima) – JimmyBanks

5

Crea una tabella mysql chiamata "failed_logins" con due campi, un campo "Utente"/chiave esterna e un campo "Timestamp".

Quando un utente accede correttamente, elimina tutte le righe "failed_logins" per quell'utente.

Quando un utente accede senza successo, crea una nuova riga in "failed_logins" per quell'utente con il timestamp corrente.

Su ogni tentativo di accesso per un determinato utente, prima di controllare per vedere se la password è corretta/non corretta:

  • esegue una query l'eliminazione di tutte le "failed_logins" righe età superiore a 15 minuti (per esempio).

  • eseguire una query controllando il conteggio delle righe in failed_logins per l'utente che tenta di accedere. Se> = 5 (ad esempio), uccidi il tentativo di accesso, notificando all'utente che sono stati bloccati dal proprio account e riprovando tra un po '.

Risultato: Gli utenti sono bloccati dal loro account dopo 5 tentativi falliti di accesso entro 15 minuti.

-5

A volte è necessario aggiungere una protezione aggiuntiva al sito Web protetto da password. Questo articolo spiega in che modo l'accesso alla pagina di accesso può essere limitato dopo tre tentativi di accesso non riusciti. Questo schema utilizza l'indirizzo IP dei visitatori per archiviare i tentativi di registrazione nel database e bloccare l'accesso alla funzionalità di accesso per 30 minuti dopo il terzo tentativo fallito.

http://webcheatsheet.com/php/blocking_system_access.php

Problemi correlati