¿Cómo deshabilito la funcionalidad "Bloqueo de IP de intentos de inundación"?

9

Drupal bloquea la IP utilizada para acceder al sitio, cuando un usuario intenta iniciar sesión muchas veces.

¿Cómo puedo deshabilitar esta funcionalidad?

夏 期 劇場
fuente

Respuestas:

12

Lo que puede hacer es agregar el siguiente código en el archivo settings.php.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

De esta manera, la IP no se bloqueará.

user_login_authenticate_validate () contiene el siguiente código.

  if (!empty($form_state['values']['name']) && !empty($password)) {
    // Do not allow any login from the current user's IP if the limit has been
    // reached. Default is 50 failed attempts allowed in one hour. This is
    // independent of the per-user limit to catch attempts from one IP to log
    // in to many different user accounts.  We have a reasonably high limit
    // since there may be only one apparent IP for all users at an institution.
    if (!flood_is_allowed('failed_login_attempt_ip', variable_get('user_failed_login_ip_limit', 50), variable_get('user_failed_login_ip_window', 3600))) {
      $form_state['flood_control_triggered'] = 'ip';
      return;
    }
    $account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' => $form_state['values']['name']))->fetchObject();
    if ($account) {
      if (variable_get('user_failed_login_identifier_uid_only', FALSE)) {
        // Register flood events based on the uid only, so they apply for any
        // IP address. This is the most secure option.
        $identifier = $account->uid;
      }
      else {
        // The default identifier is a combination of uid and IP address. This
        // is less secure but more resistant to denial-of-service attacks that
        // could lock out all users with public user names.
        $identifier = $account->uid . '-' . ip_address();
      }
      $form_state['flood_control_user_identifier'] = $identifier;

      // Don't allow login if the limit for this user has been reached.
      // Default is to allow 5 failed attempts every 6 hours.
      if (!flood_is_allowed('failed_login_attempt_user', variable_get('user_failed_login_user_limit', 5), variable_get('user_failed_login_user_window', 21600), $identifier)) {
        $form_state['flood_control_triggered'] = 'user';
        return;
      }
    }
    // We are not limited by flood control, so try to authenticate.
    // Set $form_state['uid'] as a flag for user_login_final_validate().
    $form_state['uid'] = user_authenticate($form_state['values']['name'], $password);
  }

Los límites son en realidad dos: uno para el caso de que Drupal siempre tenga una IP y otro para cuando Drupal también tiene una identificación de usuario. Este último es para el caso de que el usuario ingrese un nombre de usuario para una cuenta existente; en ese caso, Drupal registra la identificación de usuario y la IP.
Si desea evitar también ese caso, debe agregar también esta línea al archivo setting.php.

$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;
kiamlaluno
fuente
Hola Kiamlaluno, entonces significa que SOLO NECESITO agregar estas 2 líneas en el settings.php? ¿Es PHP_INT_MAXel límite infinito? ¿Puedo establecer también ese límite infinito (PHP_INT_MAX) user_failed_login_user_windowtambién? Porque está configurado como 5allí.
夏 期 劇場
PHP_INT_MAXes el valor máximo que PHP puede asignar a un entero. Establecí el otro valor en 5 porque ese es el número de segundos durante los cuales el límite es válido. Si establece user_failed_login_user_limit en 10, y user_failed_login_user_window en 5, significa que se permiten 10 intentos de inicio de sesión en 5 segundos. Simplemente cambie el archivo settings.php, y las IP / usuarios ya no estarán bloqueadas.
kiamlaluno
Perdón por mi comprensibilidad, pero todavía no estoy tan claro. Busqué y encontré que [PHP_INT_MAX] es de 2 mil millones. Entonces, ¿significa que permitiremos hasta 2 mil millones de intentos entre 5 segundos ahora? ¿Ya está listo para IP y nombre de usuario también?
夏 期 劇場
Mi preocupación final es DESACTIVAR TOTALMENTE el bloqueo de IP y / o USERNAME. [NO HAY LIMITACIONES para establecer] ¿Estas solo 2 líneas ya lo resuelven?
夏 期 劇場
Para una máquina de 64 bits, PHP_INT_MAXes 9223372036854775807; para una máquina de 32 bits, su valor es 2147483647. Tiene razón; ese es el número de intentos en 5 segundos. Si el número de intentos es menor que eso, la IP / usuario no está bloqueada.
kiamlaluno
0

En Drupal 8 , puede cambiar la configuración de inundación en el archivo de configuración user.flood.yml.

uid_only: false
ip_limit: 50
ip_window: 3600
user_limit: 5
user_window: 21600
_core:
  default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs

Esto significa que por IP y por usuario, hay un límite:

  • Por 3600 segundos (1 hora), se permiten 50 intentos por dirección IP
  • Por 21600 segundos (6 horas), se permiten 5 intentos por cuenta de usuario (muy pocos)

Puede cambiar e importar la configuración (la configuré en 100 intentos por 5 minutos):

uid_only: false
ip_limit: 100
ip_window: 300
user_limit: 100
user_window: 300
_core:
  default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs
Florian Müller
fuente
¿Hay alguna manera de hacer esto en settings.php, o similar, en lugar de modificar core / modules / user / config / install / user.flood.yml?
dhruveonmars
@dhruveonmars puede anular cada configuración en settings.php. Sería algo así como$config['user.flood']['user_limit'] = 100;
Florian Müller
¡Brillante! ¡¡Muchas gracias!!
dhruveonmars