Drupal bloquea la IP utilizada para acceder al sitio, cuando un usuario intenta iniciar sesión muchas veces.
¿Cómo puedo deshabilitar esta funcionalidad?
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;
settings.php
? ¿EsPHP_INT_MAX
el límite infinito? ¿Puedo establecer también ese límite infinito (PHP_INT_MAX)user_failed_login_user_window
también? Porque está configurado como5
allí.PHP_INT_MAX
es 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.PHP_INT_MAX
es 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.El módulo de control de inundaciones manejará esto con elegancia.
fuente
En Drupal 8 , puede cambiar la configuración de inundación en el archivo de configuración
user.flood.yml
.Esto significa que por IP y por usuario, hay un límite:
Puede cambiar e importar la configuración (la configuré en 100 intentos por 5 minutos):
fuente
$config['user.flood']['user_limit'] = 100;