“Taşkın IP engelleme girişimleri” işlevini nasıl devre dışı bırakabilirim?


9

Drupal, bir kullanıcı birçok kez oturum açmaya çalıştığında siteye erişmek için kullanılan IP'yi engeller.

Bu işlevi nasıl devre dışı bırakabilirim?

Yanıtlar:


12

Yapabilecekleriniz settings.php dosyasına aşağıdaki kodu eklemektir.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

Bu şekilde IP engellenmez.

user_login_authenticate_validate () aşağıdaki kodu içerir.

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

Sınırlar aslında iki tanedir: biri Drupal'ın her zaman bir IP'si ve diğeri Drupal'ın da bir kullanıcı kimliği olduğunda. İkincisi, kullanıcının mevcut bir hesap için bir kullanıcı adı girmesi durumudur; bu durumda, Drupal kullanıcı kimliğini ve IP'yi kaydeder.
Bu durumdan da kaçınmak istiyorsanız, bu satırı setting.php dosyasına da eklemeniz gerekir.

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

Merhaba Kiamlaluno, yani SADECE bu 2 satır eklemek gerekiyor settings.php? Mı PHP_INT_MAXsonsuz sınırı? Ayrıca bu sonsuz sınırı (PHP_INT_MAX) da ayarlayabilir miyim user_failed_login_user_window? Çünkü 5orada olduğu gibi ayarlanmış .
劇場 期 劇場

PHP_INT_MAXPHP'nin bir tamsayıya atayabileceği maksimum değerdir. Diğer değeri 5 olarak ayarladım çünkü sınırın geçerli olduğu saniye sayısı. User_failed_login_user_limit öğesini 10 ve user_failed_login_user_window değerini 5 olarak ayarlarsanız, 5 saniyede 10 giriş denemesine izin verilir. Sadece settings.php dosyasını değiştirin, IP'ler / kullanıcılar artık engellenmez.
kiamlaluno

Anlaşılabilirliğim için özür dilerim ama henüz o kadar net değilim. [PHP_INT_MAX] 'un 2 Milyar olduğunu araştırdım. Tamam, şimdi 5 saniye arasında 2 Milyar denemeye izin vereceğimiz anlamına mı geliyor? Hem IP hem de Kullanıcı Adı için zaten hazır mı?
劇場 期 劇場

Son endişem IP ve / veya USERNAME Engellemeyi denemeyi TAMAMEN DEVRE DIŞI BIRAKMAK. [Artık ayarlamak için SINIRLAMALAR YOK] Bu sadece 2 satır zaten çözüyor mu?
劇場 期 劇場

64-bit bir makine PHP_INT_MAXiçin 9223372036854775807; 32 bitlik bir makine için değeri 2147483647'dir. Doğru; 5 saniyedeki deneme sayısıdır. Deneme sayısı bundan düşükse, IP / kullanıcı engellenmez.
kiamlaluno


0

In Drupal 8 , yapılandırma dosyasında sel ayarlarını değiştirebilirsiniz user.flood.yml.

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

Bu, IP ve kullanıcı başına bir sınırın olduğu anlamına gelir:

  • 3600 saniyede (1 saat), IP adresi başına 50 denemeye izin verilir
  • 21600 saniye (6 saat) başına, kullanıcı hesabı başına 5 denemeye izin verilir (oldukça az)

Ayarları değiştirebilir ve içe aktarabilirsiniz (5 dakikada 100 denemeye ayarlıyorum):

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

Bunu core / modules / user / config / install / user.flood.yml dosyasını değiştirmek yerine settings.php veya benzeri bir yöntemle yapmanın bir yolu var mı?
dhruveonmars

@dhruveonmars ayarlarınızdaki her ayarı geçersiz kılabilirsiniz. php. Böyle bir şey olurdu$config['user.flood']['user_limit'] = 100;
Florian Müller

Parlak! Çok teşekkürler!!
dhruveonmars
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.