Wie deaktiviere ich die Funktion "Flood versucht IP-Blockierung"?

9

Drupal blockiert die IP, die für den Zugriff auf die Site verwendet wird, wenn ein Benutzer mehrmals versucht, sich anzumelden.

Wie kann ich diese Funktionalität deaktivieren?

夏 期 劇場
quelle

Antworten:

12

Sie können den folgenden Code in die Datei settings.php einfügen.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

Auf diese Weise wird die IP nicht blockiert.

user_login_authenticate_validate () enthält den folgenden Code.

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

Die Grenzen sind tatsächlich zwei: eine für den Fall, dass Drupal immer eine IP hat, und eine für den Fall, dass Drupal auch eine Benutzer-ID hat. Letzteres gilt für den Fall, dass der Benutzer einen Benutzernamen für ein vorhandenes Konto eingibt. In diesem Fall registriert Drupal die Benutzer-ID und die IP.
Wenn Sie auch diesen Fall vermeiden möchten, müssen Sie auch diese Zeile zur Datei settings.php hinzufügen.

$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;
kiamlaluno
quelle
Hallo Kiamlaluno, es bedeutet also, dass ich NUR diese 2 Zeilen in das settings.php? Ist PHP_INT_MAXdie unendliche Grenze? Kann ich dieses unendliche Limit (PHP_INT_MAX) user_failed_login_user_windowauch auf setzen? Weil es wie 5dort eingestellt ist.
期 劇場
PHP_INT_MAXist der Maximalwert, den PHP einer Ganzzahl zuweisen kann. Ich habe den anderen Wert auf 5 gesetzt, da dies die Anzahl der Sekunden ist, für die das Limit gültig ist. Wenn Sie user_failed_login_user_limit auf 10 und user_failed_login_user_window auf 5 setzen, bedeutet dies, dass 10 Anmeldeversuche in 5 Sekunden zulässig sind. Ändern Sie einfach die Datei settings.php und die IPs / Benutzer werden nicht mehr blockiert.
Kiamlaluno
Entschuldigung für meine Verständlichkeit, aber ich bin noch nicht so geklärt. Ich habe gesucht und festgestellt, dass [PHP_INT_MAX] 2 Milliarden beträgt. Ok, bedeutet das, dass wir jetzt bis zu 2 Milliarden Versuche zwischen 5 Sekunden zulassen? Ist es auch schon für IP & Benutzername bereit?
期 劇場
Mein letztes Anliegen ist es, die IP- und / oder USERNAME-Blockierungsversuche vollständig zu deaktivieren. [KEINE EINSCHRÄNKUNGEN mehr einzustellen] Lösen diese nur 2 Zeilen das Problem bereits?
期 劇場
Für einen 64-Bit-Computer PHP_INT_MAXist 9223372036854775807; für eine 32-Bit-Maschine ist der Wert 2147483647. Sie sind korrekt; Das ist die Anzahl der Versuche in 5 Sekunden. Wenn die Anzahl der Versuche geringer ist, wird die IP / der Benutzer nicht blockiert.
Kiamlaluno
0

In Drupal 8 können Sie die Flood-Einstellungen in der Konfigurationsdatei ändern user.flood.yml.

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

Dies bedeutet, dass es pro IP und pro Benutzer ein Limit gibt:

  • Pro 3600 Sekunden (1 Stunde) sind 50 Versuche pro IP-Adresse zulässig
  • Pro 21600 Sekunden (6 Stunden) sind 5 Versuche pro Benutzerkonto zulässig (ziemlich wenige).

Sie können die Einstellungen ändern und importieren (ich habe sie auf 100 Versuche pro 5 Minuten eingestellt):

uid_only: false
ip_limit: 100
ip_window: 300
user_limit: 100
user_window: 300
_core:
  default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs
Florian Müller
quelle
Gibt es eine Möglichkeit, dies in settings.php oder ähnlichem zu tun, anstatt core / modules / user / config / install / user.flood.yml zu ändern?
Dhruveonmars
@dhruveonmars Sie können jede Einstellung in Ihrer settings.php überschreiben. Es wäre so etwas wie$config['user.flood']['user_limit'] = 100;
Florian Müller
Brillant! Vielen Dank!!
Dhruveonmars