Câu trả lời:
Những gì bạn có thể làm là thêm đoạn mã sau vào tệp settings.php.
$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;
Bằng cách này, IP sẽ không bị chặn.
user_login_authenticate_validate () chứa mã sau đây.
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);
}
Các giới hạn thực sự là hai: một cho trường hợp Drupal luôn có IP và một cho khi Drupal cũng có ID người dùng. Cái sau là cho trường hợp người dùng nhập tên người dùng cho một tài khoản hiện có; trong trường hợp đó, Drupal đăng ký ID người dùng và IP.
Nếu bạn cũng muốn tránh trường hợp đó, thì bạn cũng cần thêm dòng này vào tệp settings.php.
$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;
PHP_INT_MAX
là giá trị tối đa PHP có thể gán cho một số nguyên. Tôi đặt giá trị khác thành 5 vì đó là số giây mà giới hạn hợp lệ. Nếu bạn đặt user_fails_login_user_limit thành 10 và user_fails_login_user_window thành 5, điều đó có nghĩa là 10 lần thử đăng nhập được cho phép trong 5 giây. Chỉ cần thay đổi tệp settings.php và IP / người dùng sẽ không bị chặn nữa.
PHP_INT_MAX
là 9223372036854775807; đối với máy 32 bit, giá trị của nó là 2147483647. Bạn đã đúng; đó là số lần thử trong 5 giây. Nếu số lần thử thấp hơn số đó, IP / người dùng sẽ không bị chặn.
Trong Drupal 8 , bạn có thể thay đổi cài đặt lũ trong tệp cấu hình user.flood.yml
.
uid_only: false
ip_limit: 50
ip_window: 3600
user_limit: 5
user_window: 21600
_core:
default_config_hash: UYfMzeP1S8jKaaaavxf7nQNe8DsNS-3bc2WSNNXBQWs
Điều này có nghĩa là trên mỗi IP và mỗi người dùng, có một giới hạn:
Bạn có thể thay đổi và nhập cài đặt (tôi đặt thành 100 lần thử trong 5 phút):
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
? LàPHP_INT_MAX
giới hạn vô hạn? Tôi cũng có thể đặt giới hạn vô hạn đó (PHP_INT_MAX)user_failed_login_user_window
không? Bởi vì nó được đặt như5
ở đó.