Come posso disabilitare la funzionalità "Flood tenta il blocco IP"?


9

Drupal blocca l'IP utilizzato per accedere al sito, quando un utente tenta di accedere più volte.

Come posso disabilitare questa funzionalità?

Risposte:


12

Quello che puoi fare è aggiungere il seguente codice nel file settings.php.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

In questo modo, l'IP non verrà bloccato.

user_login_authenticate_validate () contiene il seguente codice.

  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);
  }

I limiti sono in realtà due: uno per il caso Drupal ha sempre un IP e uno per quando Drupal ha anche un ID utente. Quest'ultimo è nel caso in cui l'utente inserisca un nome utente per un account esistente; in tal caso, Drupal registra l'ID utente e l'IP.
Se vuoi evitare anche quel caso, allora devi aggiungere anche questa linea al file setting.php.

$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;

Ciao Kiamlaluno, quindi significa SOLO BISOGNO di aggiungere queste 2 righe nel settings.php? Il PHP_INT_MAXlimite infinito? Posso impostare anche quel limite infinito (PHP_INT_MAX) su user_failed_login_user_window? Perché è impostato come 5lì.
夏 期 劇場

PHP_INT_MAXè il valore massimo che PHP può assegnare a un numero intero. Ho impostato l'altro valore su 5 perché è il numero di secondi per i quali il limite è valido. Se si imposta user_failed_login_user_limit su 10 e user_failed_login_user_window su 5, significa che sono consentiti 10 tentativi di accesso in 5 secondi. Basta cambiare il file settings.php e gli IP / utenti non saranno più bloccati.
kiamlaluno

Ci scusiamo per la mia comprensibilità, ma non sono ancora stato chiarito. Ho cercato e scoperto che [PHP_INT_MAX] è di 2 miliardi. Ok, allora significa che consentiremo fino a 2 miliardi di tentativi tra 5 Sec ora? È già pronto sia per IP sia per nome utente?
夏 期 劇場

La mia ultima preoccupazione è DISATTIVARE COMPLETAMENTE l'IP e / o il tentativo di USERNAME di bloccare. [NESSUNA LIMITAZIONE più da impostare] Sono solo 2 le linee che lo risolvono già?
夏 期 劇場

Per una macchina a 64 bit, PHP_INT_MAXè 9223372036854775807; per una macchina a 32 bit il suo valore è 2147483647. Hai ragione; questo è il numero di tentativi in ​​5 secondi. Se il numero di tentativi è inferiore a quello, l'IP / utente non viene bloccato.
kiamlaluno


0

In Drupal 8 , è possibile modificare le impostazioni di inondazione nel file di configurazione user.flood.yml.

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

Ciò significa che per IP e per utente esiste un limite:

  • Per 3600 secondi (1 ora), sono consentiti 50 tentativi per indirizzo IP
  • Per 21600 secondi (6 ore), sono consentiti 5 tentativi per account utente (abbastanza pochi)

È possibile modificare e importare le impostazioni (l'ho impostato su 100 tentativi per 5 minuti):

uid_only: false
ip_limit: 100
ip_window: 300
user_limit: 100
user_window: 300
_core:
  default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs

C'è un modo per farlo in settings.php o simili, invece di modificare core / modules / user / config / install / user.flood.yml?
dhruveonmars,

@dhruveonmars puoi sovrascrivere ogni impostazione nelle tue impostazioni.php. Sarebbe qualcosa del genere$config['user.flood']['user_limit'] = 100;
Florian Müller,

Brillante! Grazie mille!!
dhruveonmars,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.