ฉันจะปิดการใช้งานฟังก์ชั่น“ ลองการปิดกั้น 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 มี ID ผู้ใช้ด้วย สิ่งหลังคือในกรณีที่ผู้ใช้ป้อนชื่อผู้ใช้สำหรับบัญชีที่มีอยู่ ในกรณีนั้น Drupal จะลงทะเบียน ID ผู้ใช้และ IP
หากคุณต้องการหลีกเลี่ยงกรณีนี้คุณต้องเพิ่มบรรทัดนี้ในไฟล์ settings.php ด้วย

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

สวัสดี Kiamlaluno ดังนั้นมันหมายความว่าฉันจำเป็นต้องเพิ่ม 2 บรรทัดนี้ในsettings.php? คือPHP_INT_MAXขีด จำกัด ไม่มีที่สิ้นสุด? ฉันยังสามารถตั้งค่าขีด จำกัด infinite นั้น (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 ทั้งหมดพยายามปิดกั้น [ไม่มีข้อ จำกัด อีกต่อไปสำหรับการตั้งค่า] มีเพียง 2 บรรทัดที่แก้ไขได้หรือไม่
夏期劇場

สำหรับเครื่อง 64 บิตPHP_INT_MAXคือ 9223372036854775807 สำหรับเครื่อง 32 บิตค่าของมันคือ 2147483647 คุณถูกต้องแล้ว นั่นคือจำนวนครั้งใน 5 วินาที หากจำนวนครั้งที่พยายามต่ำกว่านั้น IP / ผู้ใช้จะไม่ถูกบล็อก
kiamlaluno


0

ในDrupal 8คุณสามารถเปลี่ยนการตั้งค่า Flood ในไฟล์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 / modules / user / config / install / user.flood.yml?
dhruveonmars

@dhruveonmars คุณสามารถแทนที่ทุกการตั้งค่าใน settings.php ของคุณ มันจะเป็นอย่างไร$config['user.flood']['user_limit'] = 100;
ฟลอเรียนมิลเลอร์

ยอดเยี่ยม! ขอบคุณมาก!!
dhruveonmars
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.