"플러드 시도 IP 차단"기능을 비활성화하려면 어떻게합니까?


9

Drupal은 사용자가 여러 번 로그인을 시도 할 때 사이트에 액세스하는 데 사용되는 IP를 차단합니다.

이 기능을 어떻게 비활성화 할 수 있습니까?

답변:


12

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를 등록합니다.
이 경우도 피하려면이 행도 setting.php 파일에 추가해야합니다.

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

안녕하세요 Kiamlaluno, 따라서이 두 줄을 settings.php? 무한한가 PHP_INT_MAX? 무한 한도 (PHP_INT_MAX)도 설정할 수 있습니까 user_failed_login_user_window? 5거기에 설정되어 있기 때문입니다 .
夏 期 劇場

PHP_INT_MAXPHP가 정수에 할당 할 수있는 최대 값입니다. 다른 값을 5로 설정했습니다. 제한이 유효한 시간 (초)이기 때문입니다. user_failed_login_user_limit를 10으로 설정하고 user_failed_login_user_window를 5로 설정하면 5 초 동안 10 회의 로그인 시도가 허용됨을 의미합니다. settings.php 파일 만 변경하면 IP / 사용자가 더 이상 차단되지 않습니다.
kiamlaluno

이해할 수있어 죄송하지만 아직 아직 명확하지 않습니다. 검색 한 결과 [PHP_INT_MAX]는 20 억입니다. 그렇다면 지금 5 초 사이에 최대 20 억 회 시도를 허용한다는 의미입니까? IP 및 사용자 이름 모두에 이미 준비되어 있습니까?
夏 期 劇場

마지막 관심사는 IP 및 / 또는 USERNAME 시도 차단을 완전히 비활성화하는 것입니다. [더 이상 설정할 제한 없음]이 두 줄만 이미 해결 되었습니까?
夏 期 劇場

64 비트 시스템의 경우 PHP_INT_MAX9223372036854775807입니다. 32 비트 시스템의 경우 해당 값은 2147483647입니다. 정확합니다. 5 초 동안의 시도 횟수입니다. 시도 횟수가 이보다 적 으면 IP / 사용자가 차단되지 않습니다.
kiamlaluno


0

에서 드루팔 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

이는 IP 및 사용자 당 제한이 있음을 의미합니다.

  • 3600 초 (1 시간)마다 IP 주소 당 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

core / modules / user / config / install / user.flood.yml을 수정하는 대신 settings.php 또는 이와 유사한 방법 으로이 작업을 수행 할 수 있습니까?
dhruveonmars

@dhruveonmars 당신은 settings.php의 모든 설정을 무시할 수 있습니다. 그것은 같은 것$config['user.flood']['user_limit'] = 100;
플로리안 뮐러

훌륭한! 정말 고마워!!
dhruveonmars
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.