আমি কীভাবে "বন্যার প্রচেষ্টা আইপি ব্লক করার চেষ্টা" কার্যকারিতা অক্ষম করব?


9

কোনও ব্যবহারকারী যখন অনেক সময় লগ ইন করার চেষ্টা করে তখন ড্রুপাল সাইটটি অ্যাক্সেস করতে ব্যবহৃত আইপি ব্লক করে।

আমি কীভাবে এই কার্যকারিতা অক্ষম করতে পারি?

উত্তর:


12

আপনি যা করতে পারেন সেটিংস.এফপি ফাইলে নিম্নলিখিত কোড যুক্ত করা।

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

এইভাবে, আইপি ব্লক করা হবে না।

ব্যবহারকারী_লগিন_আওথেন্টিকেট_অালিডেট () এ নিম্নলিখিত কোড রয়েছে।

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

সীমাগুলি আসলে দুটি: একটি ক্ষেত্রে দ্রুপালের সর্বদা একটি আইপি থাকে এবং দ্রুপালের একটি ব্যবহারকারী আইডি থাকে তার জন্য একটি। পরেরটি ক্ষেত্রে বিদ্যমান ব্যবহারকারীটির জন্য ব্যবহারকারী একটি ব্যবহারকারীর নাম প্রবেশ করে; সেক্ষেত্রে, দ্রুপাল ব্যবহারকারী আইডি এবং আইপি নিবন্ধ করুন।
আপনি যদি সে ক্ষেত্রেও এড়াতে চান, তবে আপনার এই লাইনটি সেটিংস.ফ্প ফাইলটিতে যুক্ত করতে হবে।

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

হাই কিমলালুনো, সুতরাং এর অর্থ আমি কেবল এই 2 টি লাইন যুক্ত করতে চাই settings.php? কি PHP_INT_MAXঅসীম সীমা? আমি কি সেই অসীম সীমাটি (PHP_INT_MAX) সেট করতে পারি user_failed_login_user_window? কারণ এটি 5সেখানে হিসাবে সেট করা আছে।
期 劇場

PHP_INT_MAXপিএইচপি একটি পূর্ণসংখ্যাকে নির্ধারিত সর্বাধিক মান। আমি অন্য মানটি 5 তে সেট করেছিলাম কারণ এটি সেকেন্ডের সংখ্যা যার জন্য সীমাটি বৈধ। আপনি যদি ব্যবহারকারী_ফয়েল_লগিন_ইউজার_লিমিট 10 তে এবং ব্যবহারকারী_ফয়েল_লগিন_উজার_উইন্ডো 5 তে সেট করেন তবে এর অর্থ 10 সেকেন্ডের মধ্যে 10 লগইন প্রচেষ্টা অনুমোদিত allowed কেবল সেটিংস.এফপি ফাইলটি পরিবর্তন করুন এবং আইপি / ব্যবহারকারীদের আর অবরুদ্ধ করা হয়নি।
কিমলালুনো

আমার বোধগম্যতার জন্য দুঃখিত তবে আমি এখনও এতটা সাফ হইনি। আমি অনুসন্ধান করে খুঁজে পেয়েছি যে [PHP2T_MAX] 2 বিলিয়ন। ঠিক আছে, তার মানে কি এখন আমরা 5 সেকেন্ডের মধ্যে 2 বিলিয়ন চেষ্টা করার অনুমতি দেব? এটি ইতিমধ্যে আইপি এবং ব্যবহারকারীর নাম উভয়ের জন্য প্রস্তুত?
期 劇場

আমার চূড়ান্ত উদ্বেগ হ'ল আইপি এবং / অথবা USERNAME ব্লক করার প্রচেষ্টাটি সম্পূর্ণরূপে অক্ষম করা। [সেট করার আর কোনও সীমাবদ্ধতা নেই] কেবলমাত্র 2 টি লাইন এটি ইতিমধ্যে সমাধান করছে?
期 劇場

একটি 64-বিট মেশিনের জন্য, PHP_INT_MAX9223372036854775807; একটি 32-বিট মেশিনের জন্য এর মূল্য 2147483647 You আপনি সঠিক are এটি 5 সেকেন্ডে চেষ্টা সংখ্যা। প্রয়াসের সংখ্যা যদি এর চেয়ে কম হয় তবে আইপি / ব্যবহারকারীকে অবরুদ্ধ করা হবে না।
কিমলালুনো


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

এর অর্থ প্রতি আইপি এবং প্রতি ব্যবহারকারীর জন্য একটি সীমা রয়েছে:

  • প্রতি 3600 সেকেন্ডে (1 ঘন্টা), প্রতিটি আইপি ঠিকানাতে 50 টি প্রচেষ্টা অনুমোদিত
  • 21600 সেকেন্ডে (6 ঘন্টা) প্রতি ব্যবহারকারী অ্যাকাউন্টে 5 টি প্রচেষ্টা অনুমোদিত (বেশ কয়েকটি)

আপনি সেটিংস পরিবর্তন এবং আমদানি করতে পারেন (আমি এটি প্রতি 5 মিনিটে 100 টি চেষ্টা করে রেখেছি):

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

কোর / মডিউল / ব্যবহারকারী / কনফিগার / ইনস্টল / ইউজার.ফ্লোড.আইএমএল পরিবর্তনের পরিবর্তে সেটিংস.এফপি বা অনুরূপ কোনও উপায় আছে কি?
ধ্রুবনমার্স

@ ruতুউমনমার্স আপনি নিজের সেটিংস.এফপি-র প্রতিটি সেটিংসকে ওভাররাইড করতে পারেন। এটি এমন কিছু হবে$config['user.flood']['user_limit'] = 100;
ফ্লোরিয়ান মুলার

উজ্জ্বল! অনেক ধন্যবাদ!!
ধ্রুবোনমার্স ০১:০৩
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.