Як вимкнути функцію "Блокування IP-спроб", що функціонує?


9

Drupal блокує IP, який використовується для доступу до сайту, коли користувач намагається увійти в систему багато разів.

Як я можу відключити цю функціональність?

Відповіді:


12

Що ви можете зробити, це додати наступний код у файл settings.php.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

Таким чином, IP не буде заблокований.

user_login_authenticate_validate () містить наступний код.

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

Обмеження насправді два: один для випадку Drupal завжди має IP-адресу, і один для, коли Drupal також має ідентифікатор користувача. Останнє стосується випадку, коли користувач вводить ім’я користувача для існуючого облікового запису; у цьому випадку Drupal реєструє ідентифікатор користувача та IP.
Якщо ви також хочете уникнути цього випадку, вам також слід додати цей рядок у файл setting.php.

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

Привіт Kiamlaluno, значить, я ТІЛЬКИ ПОТРІБНО додати ці 2 рядки в settings.php? Чи PHP_INT_MAXнескінченна межа? Чи можу я також встановити цю нескінченну межу (PHP_INT_MAX) user_failed_login_user_windowтакож? Тому що він встановлений як 5там.
夏 期 劇場

PHP_INT_MAX- це максимальне значення, яке PHP може призначити цілому числу. Я встановив інше значення на 5, тому що це кількість секунд, на які діє обмеження. Якщо ви встановите user_failed_login_user_limit на 10, а user_failed_login_user_window на 5, це означає, що 10 спроб входу дозволено протягом 5 секунд. Просто змініть файл settings.php, і IP-адреси / користувачі більше не блокуються.
kiamlaluno

Вибачте за мою зрозумілість, але я все ще не так зрозуміла. Я шукав і виявив, що [PHP_INT_MAX] - це 2 мільярди. Гаразд, чи це означає, що ми дозволимо до 2 спроб на мільярд між 5 сек? Чи готовий він вже до обох IP та Ім'я користувача?
夏 期 劇場

Моє останнє занепокоєння полягає в тому, щоб ЗАБЕЗПЕЧИТИ ВІДЗВИТОК IP та / або Блокування спроби USERNAME. [БЕЗ ОБМЕЖЕНЬ БЕЗ ОГРАНИЧЕННЯ] Це вже лише два рядки вирішено?
夏 期 劇場

Для 64-розрядної машини PHP_INT_MAX9223372036854775807; для 32-бітної машини її значення становить 2147483647. Ви маєте рацію; тобто кількість спроб за 5 секунд. Якщо кількість спроб нижче, ніж IP, IP / користувач не блокується.
kiamlaluno


0

У Drupal 8 ви можете змінити параметри затоплення у конфігураційному файлі user.flood.yml.

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

Це означає, що на IP та на кожного користувача існує обмеження:

  • За 3600 секунд (1 годину) дозволено 50 спроб на IP-адресу
  • За 21600 секунд (6 годин) дозволено 5 спроб на обліковий запис користувача (досить мало)

Ви можете змінити та імпортувати налаштування (я встановив його на 100 спроб за 5 хвилин):

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

Чи можливо це зробити в settings.php чи подібному, замість зміни core / module / user / config / install / user.flood.yml?
dhruveonmars

@dhruveonmars ви можете змінити всі налаштування у налаштуваннях.php. Це було б щось на кшталт$config['user.flood']['user_limit'] = 100;
Флоріан Мюллер

Блискуче! Дуже дякую!!
dhruveonmars
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.