¿Cuáles son las buenas maneras de prevenir los ataques de fuerza bruta distribuida en mi sitio web?
Yo pienso (no estoy seguro. ¡si alguien me puede asegurar, gracias !), mi sitio está protegido contra los ataques normales de fuerza bruta, ya que estoy usando el siguiente patrón para acelerar continuamente. intentos de inicio de sesión para un nombre de usuario único :
X = Failed Login Attempts
Y = Time, since the last login attempt, for which next login attempt will not be accepted (in minutes)
if X is a multiple of 5
Y = 2^(X/5)
Esto aumenta el retraso de tiempo en un exponente de 2 por cada 5 intentos de inicio de sesión incorrectos.
Luego pensé: ¿qué pasa si alguien intenta distribuir este ataque de fuerza bruta en múltiples nombres de usuario / cuentas para una misma contraseña ? O.O
Mi primer instinto fue buscar en Internet prácticas comunes. Busqué y encontré diferentes soluciones. Cada solución ha tenido sus propias desventajas, mientras que la mayoría de ellas eran demasiado complicadas.
Y luego whaaam! Esta idea descabellada cruzó mi mente:
It doesn't matter if you provide wrong or right credentials, the login script will sleep for 1 second while verifying your credentials.
Si utilizara este método, tomaría aproximadamente 14 horas probar una contraseña en cuentas de 50k o viceversa y, por lo tanto, hacer que la fuerza bruta sea poco práctica .
Desde que esta es mi primera aplicación web , estoy poco seguro de que este método sea correcto para usar. No estoy seguro de si causará demasiada carga del servidor o si es incluso seguro. ¿Este método ofrece una buena compensación entre el tiempo y el costo de los recursos, en comparación con la seguridad agregada?
Si alguien puede ayudarme a averiguar si este es el método correcto y ayudarme a mejorarlo y / o sugerir un método práctico (en caso de que esto no esté bien), quizás puedo ofrecerle una cookie adicional si alguna vez nos encontramos?