EC-CUBE4

EC-CUBEのログイン試行回数制限を変更してセキュリティを強化する

EC-CUBE 4のログイン試行回数制限は、app/config/eccube/packages/eccube.yamlにあるeccube_login_throttling_max_attempts(許可する失敗回数)とeccube_login_throttling_interval(カウント期間)を書き換えることで変更できます。デフォルトは「30分以内に5回失敗でロックアウト」です。設定変更後はキャッシュ削除で反映されます。まずはこの2行を押さえておけば十分です。
この機能はブルートフォース攻撃(総当たり攻撃)を防ぐために標準搭載されており、Symfonyのログインスロットリング機構をベースにしています。回数を絞れば攻撃耐性は上がりますが、正規ユーザーが誤入力でロックされやすくなるため、サイトの性質に合わせた調整が必要です。

ログイン試行回数を制限するスロットリング機構

デフォルトの設定

app/config/eccube/packages/eccube.yamlにある以下の設定です。

eccube_login_throttling_max_attempts: 5
eccube_login_throttling_interval: '30 minutes'

デフォルトでは、30分以内に5回失敗するとロックアウトされる設定になっています。この設定はフロント(会員ログイン)と管理画面の両方に適用されます。

設定値の意味

  • eccube_login_throttling_max_attempts: 許可する失敗回数
  • eccube_login_throttling_interval: 失敗回数をカウントする期間

ロックの判定は同一IPアドレス単位で行われます。したがって、共有回線やモバイル回線経由で複数の会員が同じグローバルIPを使う環境では、他人の失敗が自分のロックにつながる可能性がある点を踏まえて回数を決めてください。

ロードバランサ利用時のIP認識に注意

ロックの判定はクライアントのIPアドレス単位で行われるため、ロードバランサやリバースプロキシを経由する構成では注意が必要です。この場合、EC-CUBEに届くのはロードバランサのIPアドレスであり、適切な設定をしないと全アクセスが同一IPと認識されてしまいます。その結果、誰か一人がログインに失敗するとカウントが全員で共有され、まったく無関係な会員まで一斉にロックアウトされる事態が起こり得ます。
これを防ぐには、Symfonyの信頼済みプロキシ(trusted proxies)を設定し、X-Forwarded-Forヘッダーから本来のクライアントIPを取得できるようにします。ロードバランサ配下で運用する場合は、ログインスロットリングの回数を調整する前に、まずクライアントIPが正しく認識されているかを確認してください。

カスタマイズ例

1. セキュリティを強化(厳格な設定)

eccube_login_throttling_max_attempts: 3
eccube_login_throttling_interval: '60 minutes'

60分以内に3回失敗でロック。金融機関や機密性の高いサイト向け。

2. ユーザビリティ重視(緩やかな設定)

eccube_login_throttling_max_attempts: 10
eccube_login_throttling_interval: '15 minutes'

15分以内に10回失敗まで許可。パスワードを忘れやすいユーザーが多い場合。

3. バランス型(推奨設定)

eccube_login_throttling_max_attempts: 5
eccube_login_throttling_interval: '30 minutes'

デフォルト設定。セキュリティとユーザビリティのバランスが取れています。

4. 管理画面のみ厳格化

eccube.yamlの設定値はフロントと管理画面で共通のため、値を変えるだけでは片方だけを厳格化できません。管理画面のログインを特に強く守りたい場合は、URL固定・IPアドレス制限(Basic認証やWebサーバー側のallow/deny)を併用するのが現実的です。管理画面のパスはapp/config/eccube/packages/eccube.yamleccube_admin_routeで変更でき、推測されにくいパスにするだけでも自動化された攻撃の到達を減らせます。

時間指定の書き方

インターバルは以下の形式で指定できます:

  • '10 minutes' – 10分
  • '30 minutes' – 30分
  • '1 hour' – 1時間
  • '2 hours' – 2時間
  • '1 day' – 1日

設定反映方法

# コマンドラインの場合
php bin/console cache:clear

# 管理画面の場合
コンテンツ管理 > キャッシュ管理 > キャッシュ削除

設定を書き換えてもキャッシュを削除しないと反映されません。変更が効いていないと感じたら、まずキャッシュ削除を実行してから再度ログインを試してください。

まとめ

ログイン試行回数制限は、eccube.yamlの2行で「失敗回数」と「カウント期間」を調整するだけで変更できます。BtoB向けや機密性の高いサイトでは厳格に、一般消費者向けサイトではユーザビリティを考慮した設定がおすすめです。管理画面をより強く守りたい場合は、IP制限や管理画面パスの変更と組み合わせると効果的です。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ