「フラッド試行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);
  }

制限は実際には2つあります。1つはDrupalに常にIPがある場合で、もう1つはDrupalにもユーザーIDがある場合です。後者は、ユーザーが既存のアカウントのユーザー名を入力する場合のものです。その場合、DrupalはユーザーIDとIPを登録します。
そのようなケースも避けたい場合は、この行もsetting.phpファイルに追加する必要があります。

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

こんにちはキアムラルノです。つまり、これらの2行をsettings.phpPHP_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秒間に最大2億回の試行を許可するということですか?IPとユーザー名の両方の準備ができていますか?
夏期劇場

私の最後の懸念は、IPやユーザー名のブロックを完全に無効にすることです。[もう制限はありません]これらの2行だけで既に解決されていますか?
夏期劇場

64ビットマシンの場合、PHP_INT_MAX9223372036854775807です。32ビットマシンの場合、その値は2147483647です。これは、5秒間の試行回数です。試行回数がそれより少ない場合、IP /ユーザーはブロックされません。
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

つまり、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.