Bagaimana cara menonaktifkan fungsionalitas "Flood upaya IP memblokir"?


9

Drupal memblokir IP yang digunakan untuk mengakses situs, ketika pengguna mencoba masuk berkali-kali.

Bagaimana saya bisa menonaktifkan fungsi ini?

Jawaban:


12

Yang dapat Anda lakukan adalah menambahkan kode berikut dalam file settings.php.

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

Dengan cara ini, IP tidak akan diblokir.

user_login_authenticate_validate () berisi kode berikut.

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

Batasnya sebenarnya dua: satu untuk kasus Drupal selalu memiliki IP, dan satu untuk ketika Drupal juga memiliki ID pengguna. Yang terakhir adalah untuk kasus pengguna memasukkan nama pengguna untuk akun yang ada; dalam hal ini, Drupal mendaftarkan ID pengguna, dan IP.
Jika Anda ingin menghindari juga kasus itu, maka Anda perlu menambahkan juga baris ini ke file setting.php.

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

Hai Kiamlaluno, jadi itu artinya saya HANYA PERLU untuk menambahkan 2 baris ini di settings.php? Apakah PHP_INT_MAXbatas tak terbatas? Dapatkah saya juga menetapkan batas tak terbatas (PHP_INT_MAX) user_failed_login_user_windowjuga? Karena sudah diatur seperti di 5sana.
夏 期 劇場

PHP_INT_MAXadalah nilai maksimum yang dapat diberikan PHP ke integer. Saya menetapkan nilai lainnya ke 5 karena itu adalah jumlah detik yang batasnya valid. Jika Anda menetapkan user_failed_login_user_limit ke 10, dan user_failed_login_user_window ke 5, itu berarti 10 upaya login diizinkan dalam 5 detik. Ubah saja file settings.php, dan IP / pengguna tidak lagi diblokir.
kiamlaluno

Maaf atas pengertian saya tapi saya masih belum jelas. Saya mencari dan menemukan bahwa [PHP_INT_MAX] adalah 2 Miliar. Baiklah kalau begitu, apakah ini berarti kita akan mengizinkan hingga 2 Miliar upaya antara 5 Detik sekarang? Apakah sudah siap untuk IP & Nama Pengguna juga?
夏 期 劇場

Perhatian terakhir saya adalah MENONAKTIFKAN IP dan / atau USERNAME upaya untuk TOTAL. [TIDAK ADA BATASAN lagi untuk mengatur] Apakah ini hanya 2 baris sudah menyelesaikannya?
夏 期 劇場

Untuk mesin 64-bit, PHP_INT_MAXadalah 9223372036854775807; untuk mesin 32-bit nilainya 2147483647. Anda benar; itu adalah jumlah percobaan dalam 5 detik. Jika jumlah upaya lebih rendah dari itu, IP / pengguna tidak diblokir.
kiamlaluno


0

Di Drupal 8 , Anda dapat mengubah pengaturan banjir di file konfigurasi user.flood.yml.

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

Ini berarti bahwa per IP dan per pengguna, ada batasnya:

  • Per 3600 detik (1 jam), 50 upaya per alamat IP diizinkan
  • Per 21600 detik (6 jam), 5 upaya per akun pengguna diizinkan (sangat sedikit)

Anda dapat mengubah dan mengimpor pengaturan (saya atur ke 100 upaya per 5 menit):

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

Apakah ada cara untuk melakukan ini di settings.php, atau serupa, daripada memodifikasi inti / modul / pengguna / config / instal / user.flood.yml?
dhruveonmars

@dhruveonmars Anda dapat mengesampingkan setiap pengaturan di settings.php Anda. Itu akan menjadi sesuatu seperti$config['user.flood']['user_limit'] = 100;
Florian Müller

Cemerlang! Terima kasih banyak!!
dhruveonmars
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.