Drupal บล็อก IP ที่ใช้ในการเข้าถึงเว็บไซต์เมื่อผู้ใช้พยายามเข้าสู่ระบบหลายครั้ง
ฉันจะปิดการใช้งานฟังก์ชั่นนี้ได้อย่างไร?
Drupal บล็อก IP ที่ใช้ในการเข้าถึงเว็บไซต์เมื่อผู้ใช้พยายามเข้าสู่ระบบหลายครั้ง
ฉันจะปิดการใช้งานฟังก์ชั่นนี้ได้อย่างไร?
คำตอบ:
สิ่งที่คุณสามารถทำได้คือการเพิ่มรหัสต่อไปนี้ในไฟล์ 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;
PHP_INT_MAX
เป็นค่าสูงสุด PHP สามารถกำหนดให้เป็นจำนวนเต็ม ฉันตั้งค่าอื่นเป็น 5 เพราะนั่นคือจำนวนวินาทีที่การ จำกัด นั้นถูกต้อง หากคุณตั้งค่า user_failed_login_user_limit เป็น 10 และ user_failed_login_user_window เป็น 5 จะหมายถึงอนุญาตการเข้าสู่ระบบได้ 10 ครั้งใน 5 วินาที เพียงแค่เปลี่ยนไฟล์ settings.php และ IP / ผู้ใช้จะไม่ถูกบล็อกอีกต่อไป
PHP_INT_MAX
คือ 9223372036854775807 สำหรับเครื่อง 32 บิตค่าของมันคือ 2147483647 คุณถูกต้องแล้ว นั่นคือจำนวนครั้งใน 5 วินาที หากจำนวนครั้งที่พยายามต่ำกว่านั้น IP / ผู้ใช้จะไม่ถูกบล็อก
ควบคุมน้ำท่วมโมดูลจะจัดการเรื่องนี้อย่างหรูหรา
ใน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 และต่อผู้ใช้มีข้อ จำกัด :
คุณอาจเปลี่ยนและนำเข้าการตั้งค่า (ฉันตั้งค่าเป็น 100 ครั้งต่อ 5 นาที):
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
ขีด จำกัด ไม่มีที่สิ้นสุด? ฉันยังสามารถตั้งค่าขีด จำกัด infinite นั้น (PHP_INT_MAX)user_failed_login_user_window
ได้หรือไม่? เพราะมันถูกตั้งค่าตามที่5
นั่น