मैं "बाढ़ के प्रयासों को अवरुद्ध आईपी" कार्यक्षमता को कैसे अक्षम करूं?


9

जब उपयोगकर्ता कई बार लॉग इन करने का प्रयास करता है, तो Drupal साइट को एक्सेस करने के लिए उपयोग किए जाने वाले IP को ब्लॉक कर देता है।

मैं इस कार्यक्षमता को कैसे अक्षम कर सकता हूं?

जवाबों:


12

आप क्या कर सकते हैं सेटिंग में निम्नलिखित कोड जोड़ रहे हैं। पीएफ फ़ाइल।

$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;

इस तरह, आईपी अवरुद्ध नहीं होगा।

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 रजिस्टर करता है।
अगर आप भी उस स्थिति से बचना चाहते हैं, तो आपको इस लाइन को सेटिंग फ़ाइल में भी जोड़ना होगा।

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

हाय kiamlaluno, तो इसका मतलब है कि मैं केवल इन 2 लाइनों को जोड़ने की आवश्यकता है settings.php? है PHP_INT_MAXअनंत सीमा? क्या मैं उस अनंत सीमा (PHP_INT_MAX) को user_failed_login_user_windowभी सेट कर सकता हूं ? क्योंकि यह 5वहाँ के रूप में सेट है ।
35

PHP_INT_MAXअधिकतम मूल्य है जो PHP एक पूर्णांक को निर्दिष्ट कर सकता है। मैंने दूसरे मान को 5 पर सेट किया है क्योंकि यह सेकंड की संख्या है जिसके लिए सीमा वैध है। यदि आप user_failed_login_user_limit को 10 पर सेट करते हैं, और user_failed_login_user_window से 5, इसका मतलब है कि 5 सेकंड में 10 लॉगिन प्रयास की अनुमति है। बस settings.php फ़ाइल को बदलें, और IPs / उपयोगकर्ताओं को अब ब्लॉक नहीं किया गया है।
kiamlaluno

मेरी समझ के लिए क्षमा करें, लेकिन मैं अभी भी इतना साफ नहीं हूं। मैंने खोजा और पाया कि [PHP_INT_MAX] 2 बिलियन है। ठीक है, तो क्या इसका मतलब है कि हम 5 सेकंड के बीच 2 बिलियन प्रयासों की अनुमति देंगे? क्या यह पहले से ही IP और Username दोनों के लिए तैयार है?

मेरी अंतिम चिंता IP और / या USERNAME प्रयास को अवरुद्ध करने की पूरी तरह से है। [कोई सीमा निर्धारित करने के लिए अब] क्या ये केवल 2 लाइनें इसे पहले से ही हल करती हैं?

64-बिट मशीन के लिए, PHP_INT_MAX922337203685474780807 है; एक 32-बिट मशीन के लिए इसका मूल्य 2147483647 है। आप सही हैं; यह 5 सेकंड में प्रयासों की संख्या है। यदि प्रयासों की संख्या इससे कम है, तो आईपी / उपयोगकर्ता अवरुद्ध नहीं है।
kiamlaluno


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

कोर / मॉड्यूल / उपयोगकर्ता / विन्यास / स्थापित / user.flood.yml को संशोधित करने के बजाय सेटिंग में ऐसा करने का कोई तरीका है।
dhruveonmars

@dhruveonmars आप अपनी सेटिंग में हर सेटिंग को ओवरराइड कर सकते हैं। यह कुछ इस तरह होगा$config['user.flood']['user_limit'] = 100;
फ्लोरियन मुलर

प्रतिभाशाली! बहुत बहुत धन्यवाद!!
dhruveonmars
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.