No hay una "mejor" solución que se ajuste a cada sistema. Pero estoy de acuerdo con Kamic, es una cuestión de equilibrio.
Me gustaría señalar una debilidad aquí. Si va de la forma más segura , realmente puede hacer que su sistema sea menos seguro.
Sistema "muy seguro"
Usted es paranoico, bloquea a los usuarios por 3 intentos de contraseña incorrectos y les pide que vengan a la oficina con documentos en papel, hagan análisis de ADN y desbloqueen solo después de este procedimiento confiable. ¡Imposible hackearlo!
Sí, el desbloqueo es difícil y 'costoso', lleva tiempo, pero es una situación muy rara y desbloquear 1-2 usuarios en una semana no es un problema ni para usted ni para los usuarios.
Sistema de hacking "muy seguro"
¿Qué pasaría si Attacked escribiera un script simple que haría N intentos incorrectos de contraseña para cada nombre de usuario conocido y lo ejecutaría durante algunas horas? Su sistema ha sido exitosamente DoSed! Tiene miles de usuarios, pero todos están bloqueados, entonces no pueden acceder al sistema, su teléfono está sonando todo el tiempo, los usuarios están enojados, los usuarios están perdiendo. Solo esta situación es terrible y vale la pena evitar cualquier mecanismo de protección que pueda llevar a tal falla. Usted protegió la confidencialidad, pero la pagó con disponibilidad.
Pero las cosas pueden ir aún peor. Ahora en una situación tan extrema, entiendes que no puedes desbloquear manualmente a todos los usuarios. (invítelos a su habitación, verifique la identificación ...) Y debe cambiar las reglas y desbloquearlas con una llamada telefónica no verificada "¿me dice que me llamo John Doe? De acuerdo, desbloqueo su cuenta, su contraseña es 123456, Por favor, cambiarlo después de iniciar sesión ". Ahora le dio al atacante una contraseña válida a través de una llamada telefónica.
En este caso, sería mucho mejor si cada usuario estuviera bloqueado solo durante 1 hora para N intentos de contraseñas incorrectas. Esto es suficiente para detener el uso de la fuerza bruta (en realidad no importa, si las conjeturas de contraseña tardarían 100 años o 100 mil millones de años), y no será un problema si el atacante intentará abusar de este mecanismo.
Camino correcto
Para cada situación, debes considerar diferentes escenarios de ataque y formas de luchar con ella. Si el usuario puede desbloquearse fácilmente, es rápido y gratuito (no cuesta ni un minuto de tiempo), entonces el bloqueo duro (sin desbloqueo automático) también está bien.
Debería considerar las pérdidas para cada forma (¿cuánto perderá si el atacante usará la contraseña de fuerza bruta para cuentas 1-2? ¿cuánto perderá si el atacante bloqueará el 100% de las cuentas?), qué tan difícil es para el atacante y las posibilidades de cada tipo de ataque.
La forma correcta en cada situación depende de muchas cosas, como la cantidad de usuarios, cuán secretos son los nombres de usuario (o todos conocen los nombres de usuarios de todos los usuarios, como 'cat / etc / passwd' en Unix), qué tan difícil es acceder a sistema (es un sitio web público, o solo 10 empleados pueden acceder a este sitio de intranet), qué tan anónimo es un atacante, etc.
(Perdón por el mal inglés)