जवाबों:
आप क्या कर सकते हैं सेटिंग में निम्नलिखित कोड जोड़ रहे हैं। पीएफ फ़ाइल।
$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;
PHP_INT_MAX
अधिकतम मूल्य है जो PHP एक पूर्णांक को निर्दिष्ट कर सकता है। मैंने दूसरे मान को 5 पर सेट किया है क्योंकि यह सेकंड की संख्या है जिसके लिए सीमा वैध है। यदि आप user_failed_login_user_limit को 10 पर सेट करते हैं, और user_failed_login_user_window से 5, इसका मतलब है कि 5 सेकंड में 10 लॉगिन प्रयास की अनुमति है। बस settings.php फ़ाइल को बदलें, और IPs / उपयोगकर्ताओं को अब ब्लॉक नहीं किया गया है।
PHP_INT_MAX
922337203685474780807 है; एक 32-बिट मशीन के लिए इसका मूल्य 2147483647 है। आप सही हैं; यह 5 सेकंड में प्रयासों की संख्या है। यदि प्रयासों की संख्या इससे कम है, तो आईपी / उपयोगकर्ता अवरुद्ध नहीं है।
बाढ़ नियंत्रण मॉड्यूल इस सुंदर ढंग से संभाल लेंगे।
में 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
इसका मतलब है कि प्रति आईपी और प्रति उपयोगकर्ता, एक सीमा है:
आप सेटिंग्स बदल सकते हैं और आयात कर सकते हैं (मैं इसे 5 मिनट प्रति 100 प्रयासों पर सेट करता हूं):
uid_only: false
ip_limit: 100
ip_window: 300
user_limit: 100
user_window: 300
_core:
default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs
$config['user.flood']['user_limit'] = 100;
settings.php
? हैPHP_INT_MAX
अनंत सीमा? क्या मैं उस अनंत सीमा (PHP_INT_MAX) कोuser_failed_login_user_window
भी सेट कर सकता हूं ? क्योंकि यह5
वहाँ के रूप में सेट है ।