Non voglio dal server forzare la forza bruta, ma non voglio usare un CAPTCHA perché non sono user-friendly / Non voglio fare affidamento su un'altra azienda - perché non ho intenzione di implementare il mio sistema captcha.
Ho pensato di creare una tabella attempts
con questa struttura:
________________________________________________________________
| IP | ATTEMPTS | LOCK |
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
| 1.1.1.1 | 0 | 2 |
| .... | .... | .... |
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Yes I had fun making this
E lascia che l'utente abbia 5-10 tentativi, prima di resettare a 0 e aumentando il tempo di blocco di un fattore 2 - è in minuti.
Questo è un buon metodo per bloccare una forza bruta?
Avrei una logica come questa sul mio server: - abstracted
....
* on request to server do below *
db.query("SELECT * FROM attempts WHERE IP= *REQUEST.IP* ",function(result){
if (result.rows.length > 0 && result.rows[0].attempts > 5) {
if (CheckIfExpired(results.rows[0].lock)) {
if (loginFail) MultplyLockBy2();
else RemoveFromAttemptsTable();
} else res.status("403").send("You're locked out");
} else normalLoginAttempt().ifFal(add1toAttempts());
....
Ho la sensazione che ci sia un modo più efficiente per farlo in modo nativo in SQL, io sono un novizio con SQL. (Sto usando postgresql).
Dopo aver visto ciò, suppongo che mi serva anche un campo di avvio, in modo da poter calcolare quando il blocco è scaduto.
EDIT: dopo aver fatto delle ricerche, ho letto / sto pensando di implementare fail2ban che controlla Apache / nginx e blocca gli utenti; un cookie che consente a un utente di connettersi nuovamente al proprio account senza Captcha / prova di lavoro, e quindi di far ottenere a captcha altri; o solo un captcha in combinazione con un blocco;