usuario tres sesion intentos despues como bloquear php mysql login statistics

php - tres - bloqueo de inicio de sesión después de X intentos fallidos



login 3 intentos php (2)

Necesita lo que se llama una ventana de intento de contraseña.

Básicamente 2 campos en la base de datos, un LastPasswordAttempt (datetime) y PasswordAttemptCount (int)

Luego, en cada inicio de sesión, verifique cuándo se produjo el último intento LastPassword y si fue el último, digamos 10 minutos, incremente PasswordAttemptCount; de lo contrario, reinícielo a 0 (o 1 porque han fallado).

En la misma lógica, compruebe si PasswordAttemptCount equivale a decir 5 o más, si lo es: denegar el acceso del usuario. Podría tener un tercer campo que los bloquee durante unas horas o un día.

es decir, CanLoginAfter (datetime) que puede establecer en un día desde el último intento de contraseña.

Espero que esto ayude

Intento bloquear el inicio de sesión por x minutos después de los intentos fallidos. Ya estoy planeando registrar los inicios de sesión de los usuarios, así que supongo que podría usar la misma base de datos para calcular si el bloqueo debe suceder.

Mis preguntas:

  • ¿Tiene sentido usar la misma tabla de registros para ejecutar la lógica del bloqueo de intentos fallidos?
  • Algunas personas tienen una tabla solo para los intentos fallidos, y he oído que aumentan el número de inicios de sesión fallidos. Esto no tiene sentido ya que todo lo que almacenan es la cantidad de intentos fallidos, no dentro de qué período de tiempo. 3 intentos fallidos en 10 minutos no son lo mismo que 3 intentos fallidos en 3 días. ¿Importa el tiempo? Bloquea después de x intentos fallidos, período o x intentos fallidos dentro de un intervalo de tiempo. ¿Y cuál es el mejor marco de tiempo para esto?
  • ¿Alguien puede aclarar el enfoque de mejores prácticas para esto?

Un enfoque sería hacer esto:

  • user_lockout: user_id, expires_dt (podría ser parte de la tabla de usuario habitual)
  • failed_login_log: user_id, dt (podría ser parte de otra tabla de registro)

Ante cualquier intento de inicio de sesión para user_id , verifique que expires_dt esté en el pasado o NULL. (Si en el futuro, la cuenta está bloqueada)

Tras un inicio de sesión fallido, inserte un registro en failed_login_log y luego haga un recuento de la cantidad de inicios de sesión fallidos en los últimos X minutos ( WHERE dt > DATE_SUB(NOW(), INTERVAL x MINUTES) ).

Si ese recuento es mayor que Y, actualice user_lockout.expires_dt a NOW() + Z MINUTES .

Esto le permite bloquear una cuenta durante Z minutos después de que Y haya fallado intentos dentro de X minutos.