Per i miei progetti ho scritto una libreria generalizzata "floodcontrol" che gestisce questo tipo di cose.
Mi consente di specificare quanti tentativi possono essere effettuati in X quantità di tempo.Permette un certo numero di tentativi di "grazia" in un breve periodo, in modo da catturare solo comportamenti davvero insoliti.
I record nel database un paio di cose:
- L'indirizzo IP (o le prime 24 bit di esso)
- L'azione che è stata tentata (cioè 'log in', 'ricerca', 'commento')
- il tempo del tentativo
- Numero di tentativi (contatore dei tentativi)
Per ogni tentativo fatto interrogo contro l'IP parziale aggiungere ress e l'azione, e se è stato effettuato un tentativo precedente entro una certa finestra di tempo, incrementare il contatore dei tentativi per quel tentativo. Se il contatore dei tentativi supera il numero di tentativi di grazia consentiti, controllo se l'ultimo tentativo è avvenuto entro X secondi e, in questo caso, restituisce false, pertanto l'azione verrà bloccata (e all'utente verrà detto di attendere X secondi prima di provare ancora). Se il contatore dei tentativi è inferiore al numero di tentativi di grazia, restituisco true e lo faccio scorrere.
Se una persona con lo stesso IP arriva più tardi, il conteggio del tentativo precedente non verrà recuperato, perché sarà troppo tempo fa.
@artarad: Sarei molto seccato se avessi un captcha ogni volta che ho provato ad accedere. Non penso che dovrebbe essere visualizzato fino a quando falliscono come 3 volte, e quindi forse dare loro altri 3 circa tentativi prima di bloccarli per un periodo di volte. I captcha non sono infrangibili dalle macchine ... solo più difficili. Penso che il mio professore abbia incrinato oltre il 90% di em con la sua sceneggiatura. – mpen