No quiero que el servidor se vea forzado por el servidor, pero no quiero usar un CAPTCHA ya que no son fáciles de usar / No quiero depender de otra compañía, porque no voy a Implementar mi propio sistema de captcha.
He pensado en crear una tabla attempts
con esta estructura:
________________________________________________________________
| IP | ATTEMPTS | LOCK |
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
| 1.1.1.1 | 0 | 2 |
| .... | .... | .... |
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Yes I had fun making this
Y deje que el usuario haga 5-10 intentos, antes de restablecer a 0 y aumentando el tiempo de bloqueo en un factor de 2, es en minutos.
¿Es este un buen método para bloquear una fuerza bruta?
Tendría una lógica como esta en mi servidor: - abstraída
....
* 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());
....
Tengo la sensación de que hay una forma más eficiente de hacerlo de forma nativa en SQL, soy un principiante con SQL. (Estoy usando postgresql).
Después de ver esto, supongo que también necesitaré un campo de tiempo de inicio, para poder calcular cuándo ha expirado el bloqueo.
EDITAR: después de investigar, he leído / estoy pensando en implementar fail2ban, que verifica los registros de Apache / nginx y bloquea a los usuarios; una cookie que permite a un usuario conectarse de nuevo a su cuenta sin Captcha / prueba de trabajo, y luego hacer que otros obtengan captcha; o simplemente un captcha junto con un bloqueo;