¿Es esta una buena manera de manejar el proceso de inicio de sesión

3

Solo quería saber si esto se consideraría una buena manera de manejar el proceso de inicio de sesión. No importa en qué idioma esté escrito.

Voy a utilizar este formato de compañeros. - Evento (Donde ocurrió)

  1. Conéctese al servidor con las credenciales de usuario. (Cliente)
  2. Verifique si la dirección IP está bloqueada (buscando en una tabla en la base de datos), si es SÍ, envíe ERROR indicando que la IP está bloqueada. (Servidor)
  3. Verifique si la cuenta está activa, si NO, entonces envíe un ERROR al cliente diciendo que la cuenta no está activa. (Servidor)
  4. Verifique si la cuenta está bloqueada / prohibida en el servidor; en caso afirmativo, envíe ERROR indicando que la cuenta está bloqueada o prohibida en el servidor. (Servidor)
  5. Compare el hash de contraseña con el hash de contraseña de la cuenta de usuario de la base de datos, si la comparación es NEGATIVA, aumente el número de intentos en la base de datos asociada a la dirección IP. Si se alcanzan 3 entonces prohibir la dirección IP. (Servidor)
  6. El inicio de sesión es exitoso en este punto!

Pregunta adicional:

  1. Si observa el punto 5. Intenté encontrar una buena forma de bloquear al usuario real que intenta iniciar sesión (lo que no significa que sea el propietario de la cuenta), pero sin afectar al usuario real. Lo que quiero decir es que si alguien más que el propietario de la cuenta intenta iniciar sesión más de 3 veces en la cuenta específica, se le prohibirá su dirección IP en lugar de la cuenta en cuestión. ¿Sería mejor bloquear la cuenta también? ¿Por un tiempo limitado o algo así?

¡Gracias!

    
pregunta Rushino 22.02.2013 - 16:04
fuente

2 respuestas

5

En su proceso, las personas obtendrán un código de error distinto dependiendo de si la cuenta existe o no. Esto a menudo se considera algo inoportuno. Es preferible, si no es posible, saber si existe una cuenta determinada nombre ; por lo tanto, el comportamiento observable de su servidor debe ser el mismo en todas las situaciones que dependen del nombre de la cuenta y conducen a una falla: la cuenta no existe, la cuenta está deshabilitada, la contraseña es incorrecta. Tenga en cuenta que el "comportamiento observable" incluye no solo el código de error que devuelve, sino también el tiempo que tarda su servidor en responder (si utiliza el hashing de contraseñas lento y salado à la bcrypt - y realmente deberías hacer eso - entonces la verificación de la contraseña puede tomar un tiempo no despreciable que se puede medir desde el exterior).

Prohibir una dirección IP después de algunos fallos tiene las siguientes advertencias:

  • La dirección IP que ve puede ser compartida entre varias personas, en caso de NAT . Esto es muy común en las organizaciones. También son comunes los proxies HTTP . No desea tres errores de un usuario para inducir a su servidor a prohibir una universidad completa, o incluso a todos los clientes de un ISP específico.

  • A veces, las personas olvidan su contraseña. Esto pasa mucho. Así obtendrá errores de inicio de sesión "legítimos". Dichos usuarios querrán usar el proceso "Olvidé mi contraseña", y querrán hacerlo inmediatamente . Por lo tanto, la prohibición no debe ser larga (por ejemplo, prohibir un minuto como máximo).

  • Los atacantes que tienen la intención de probar una gran cantidad de posibles pares de inicio de sesión y contraseña tendrán relativamente pocos problemas para encontrar hosts de retransmisión para solucionar su prohibición basada en IP. P.ej. Tor , por construcción, disminuye la eficiencia de la prohibición de IP.

Por lo tanto, no recomiendo la prohibición de direcciones IP de forma general: tiene un alto riesgo de interrumpir el servicio para los usuarios normales, aunque no es muy efectivo contra los atacantes promedio. La prohibición de IP es útil contra situaciones de ráfaga con atacantes crudos (por ejemplo, ataques automáticos de botnets que intentan replicarse), con herramientas como Fail2ban , pero pueden contraproducente, por lo que se debe tener precaución.

Tenga en cuenta que el bloqueo de cuentas también puede ser contraproducente:

  • Bloquear una cuenta después de demasiados fallos significa que cualquiera puede bloquear las cuentas de otras personas.

  • Los atacantes que intentan varios pares de inicio de sesión y contraseña pueden repartir sus intentos en muchos inicios de sesión distintos, evitando la función de bloqueo.

Las soluciones razonables implican bloques de tiempo limitado (bloquear una cuenta durante aproximadamente un minuto después de unas pocas contraseñas incorrectas) junto con la prohibición de IP por tiempo limitado cuando se identifica un patrón de acceso muy sospechoso (mucho de intentos de conexión desde la misma IP). No brindarán una protección sólida (solo las contraseñas de usuario sólidas), pero pueden ayudar a reducir el ruido de los atacantes de bajo grado y le permiten concentrarse en los pocos casos en que los atacantes tienen una competencia inusual.

    
respondido por el Thomas Pornin 22.02.2013 - 16:23
fuente
0
  

Intenté encontrar una buena forma de bloquear al usuario real que intenta iniciar sesión (lo que no significa que sea el propietario de la cuenta), pero sin afectar al usuario real. Lo que quiero decir es que si alguien más que el propietario de la cuenta intenta iniciar sesión más de 3 veces en la cuenta específica, se le prohibirá su dirección IP en lugar de la cuenta en cuestión

Si en este momento pudiste avisar a un hacker del usuario legítimo, ¿para qué molestarse con un formulario de inicio de sesión? Solo deja que el usuario legítimo pase.

    
respondido por el Jeff 21.09.2013 - 21:02
fuente

Lea otras preguntas en las etiquetas