Según lo solicitado, inventaré mi propia respuesta.
Si un usuario malicioso B quiere bloquear al usuario A, podría intentar iniciar sesión con el nombre de usuario de A 4 veces cada 5 minutos. Entonces A no pudo iniciar sesión en la aplicación.
Ese es el problema al bloquear cuentas: no sabes si el usuario es realmente legítimo hasta que pasaron la pantalla de inicio de sesión. Por lo tanto, no puede asumir que el usuario A está intentando iniciar sesión en la cuenta A. Si no es un problema para los sitios web clásicos, puede ser muy problemático para los juegos web (puedo bloquear otra cuenta justo antes de atacarlos, por lo que no pueden defenderse). / p>
Por lo general, la razón por la que el webmaster quiere bloquear cuentas es:
Quiero evitar una fuerza bruta
Pero si se rompe su base de datos, se puede realizar un ataque sin conexión y evitar el enfoque de fuerza bruta de las cuentas de bloqueo.
Además, en mi experiencia, los atacantes rara vez fuerzan una cuenta directamente. ¿Por qué? Porque requiere un poco de tiempo para obtener la contraseña correcta (si se eligió bien). Por lo tanto, los atacantes proceden de otra forma: enumeran todas las cuentas en el servidor y prueban las contraseñas más utilizadas en cada una de ellas, cuenta por cuenta. De alguna manera, en lugar de probar todas las contraseñas en una cuenta, prueban una contraseña en todas las cuentas. Por lo tanto, su sistema de fuerza bruta es ineficiente.
OMI, una mejor manera de evitar la fuerza bruta es simplemente hacer que la comprobación de hash sea más larga (1 segundo) , usando iteraciones suficientes para que tome 1 segundo (o así) por verificación. Haciendo esto:
- Si un atacante apunta a una cuenta, necesitarán miles de millones de millones de años para violarla si la contraseña fue bien elegida. Si realizan un ataque paralelo, todavía necesitarán miles de millones de años
- Ya debería tener alguna mitigación de DDoS, por lo que en caso de que un ataque requiera demasiados recursos en su servidor, entonces estará seguro (es otro campo que las cuentas de fuerza bruta). Por ejemplo, puede "priorizar" recursos, dándoles primero a los usuarios que han iniciado sesión y dejando la mitad de los restantes a los que no han iniciado sesión
- Si un atacante intenta una contraseña en todas las cuentas, aún necesitará mucho tiempo para probar los miles de cuentas de usuario que tiene
- Si se rompe la base de datos, el ataque sin conexión aún necesitará mucho tiempo, lo suficiente para que los usuarios actualicen sus contraseñas
- Es sin estado, por lo que no tendrá problemas para almacenar quién hizo un intento de inicio de sesión, en qué cuenta, etc.
- 1 segundo es lo suficientemente corto como para que los usuarios normales no lo noten