Làm cách nào để vô hiệu hóa các cơn lũ Lốc thử các chức năng chặn IP của IP?


9

Drupal chặn IP được sử dụng để truy cập trang web, khi người dùng cố gắng đăng nhập nhiều lần.

Làm thế nào tôi có thể vô hiệu hóa chức năng này?

Câu trả lời:


12

Những gì bạn có thể làm là thêm đoạn mã sau vào tệp settings.php.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

Bằng cách này, IP sẽ không bị chặn.

user_login_authenticate_validate () chứa mã sau đây.

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

Các giới hạn thực sự là hai: một cho trường hợp Drupal luôn có IP và một cho khi Drupal cũng có ID người dùng. Cái sau là cho trường hợp người dùng nhập tên người dùng cho một tài khoản hiện có; trong trường hợp đó, Drupal đăng ký ID người dùng và IP.
Nếu bạn cũng muốn tránh trường hợp đó, thì bạn cũng cần thêm dòng này vào tệp settings.php.

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

Xin chào Kiamlaluno, vậy có nghĩa là tôi CHỈ CẦN thêm 2 dòng này vào settings.php? Là PHP_INT_MAXgiới hạn vô hạn? Tôi cũng có thể đặt giới hạn vô hạn đó (PHP_INT_MAX) user_failed_login_user_windowkhông? Bởi vì nó được đặt như 5ở đó.
夏 期

PHP_INT_MAXlà giá trị tối đa PHP có thể gán cho một số nguyên. Tôi đặt giá trị khác thành 5 vì đó là số giây mà giới hạn hợp lệ. Nếu bạn đặt user_fails_login_user_limit thành 10 và user_fails_login_user_window thành 5, điều đó có nghĩa là 10 lần thử đăng nhập được cho phép trong 5 giây. Chỉ cần thay đổi tệp settings.php và IP / người dùng sẽ không bị chặn nữa.
kiamlaluno

Xin lỗi vì sự dễ hiểu của tôi nhưng tôi vẫn chưa được xóa. Tôi đã tìm kiếm và thấy rằng [PHP_INT_MAX] là 2 tỷ. Được rồi, điều đó có nghĩa là chúng tôi sẽ cho phép tối đa 2 tỷ lần thử trong khoảng 5 giây ngay bây giờ? Nó đã sẵn sàng cho cả IP & Tên người dùng chưa?
夏 期

Mối quan tâm cuối cùng của tôi là HOÀN TOÀN BẮT ĐẦU IP và / hoặc USERNAME cố gắng Chặn. [KHÔNG GIỚI HẠN nữa để đặt] Có phải 2 dòng này đã giải quyết xong chưa?
夏 期

Đối với máy 64 bit, PHP_INT_MAXlà 9223372036854775807; đối với máy 32 bit, giá trị của nó là 2147483647. Bạn đã đúng; đó là số lần thử trong 5 giây. Nếu số lần thử thấp hơn số đó, IP / người dùng sẽ không bị chặn.
kiamlaluno


0

Trong Drupal 8 , bạn có thể thay đổi cài đặt lũ trong tệp cấu hình user.flood.yml.

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

Điều này có nghĩa là trên mỗi IP và mỗi người dùng, có một giới hạn:

  • Mỗi 3600 giây (1 giờ), 50 lần thử cho mỗi địa chỉ IP được cho phép
  • Mỗi 21600 giây (6 giờ), 5 lần thử cho mỗi tài khoản người dùng được cho phép (khá ít)

Bạn có thể thay đổi và nhập cài đặt (tôi đặt thành 100 lần thử trong 5 phút):

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

Có cách nào để làm điều này trong settings.php, hoặc tương tự, thay vì sửa đổi core / module / user / config / install / user.flood.yml không?
dhruveonmars

@dhruveonmars bạn có thể ghi đè mọi cài đặt trong settings.php của bạn. Nó sẽ giống như$config['user.flood']['user_limit'] = 100;
Florian Müller

Xuất sắc! Cám ơn rất nhiều!!
dhruveonmars
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.