EC-CUBE Lab
produced by Cajiya
EC-CUBEに関するカスタマイズ方法やトラブルへの対処方法を発信

悪意のあるボットによる大量の会員登録を制限する方法

公開日: 2025年09月23日 | 更新日: 2025年11月01日
会員登録 セキュリティ強化 EC-CUBE 4系全般 サービス/コントローラ拡張

要望や症状

不正なbot等によって、大量の会員登録リクエストが送信されるケースがあります。これらの不正登録では基本的に入力内容が毎回異なっているため、単純な重複チェックでは対応が困難となっています。

理由や原因

EC-CUBE標準の会員登録フォームには、自動化されたスパム攻撃を防ぐ仕組みが組み込まれていないため、ボットによる大量の自動登録が可能な状態となっています。

解決策

インフラレベルでの対策

WAFによるブロック設定

使用しているレンタルサーバーのWAF(Web Application Firewall)機能を有効化し、不審なアクセスパターンを自動的にブロックします。多くのレンタルサーバーでは管理画面から簡単に設定可能です。

IPアドレスによるアクセス制限

特定のIPアドレスからの大量アクセスを検出した場合、サーバー設定でアクセスを制限します。

# .htaccess での IP ブロック例
<RequireAll>
    Require all granted
    Require not ip 192.168.1.100
    Require not ip 10.0.0.0/8
</RequireAll>

システムレベルでの対策

reCAPTCHA導入によるBot対策

GoogleのreCAPTCHA v3を会員登録フォームに実装し、Bot判定を行います。
EC-CUBE オーナーズストアでは以下のプラグインが提供されています。

  • いつも reCAPTCHA [4.0系/4.1系]プラグイン
  • reCAPTCHAプラグイン(会員登録・会員情報編集・お問い合わせ・注文手続き)プラグイン

同一情報による重複登録の制限

不正な会員登録の内容を分析し、合致する条件でリクエストを拒否します。
例えば、以下のような条件で判定できます:

  • 名前や住所、会社名や誕生日が同じ
  • メールアドレスのドメインが同じ一般的でないものが使用されている
  • 短時間での連続登録

CustomizeディレクトリでEventSubscriberを作成することで、カスタムロジックによる制限が可能です。

ファイル配置先: app/Customize/EventSubscriber/CustomerRegistrationSubscriber.php

<?php

namespace Customize\EventSubscriber;

use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

class CustomerRegistrationSubscriber implements EventSubscriberInterface
{
    /**
     * 購読するイベントを定義
     */
    public static function getSubscribedEvents()
    {
        return [
            EccubeEvents::FRONT_ENTRY_INDEX_COMPLETE => 'onCustomerRegistration',
        ];
    }

    /**
     * 会員登録時の制限処理
     */
    public function onCustomerRegistration(EventArgs $event)
    {
        $Customer = $event->getArgument('Customer');
        $email = $Customer->getEmail();
        
        // ブロック対象ドメインリスト
        $blockedDomains = [
            'example.com',
            'spam-domain.com',
            'temporary-mail.com',
            // 必要に応じてドメインを追加
        ];
        
        // メールアドレスからドメインを抽出
        $emailDomain = substr(strrchr($email, '@'), 1);
        
        // ブロック対象ドメインをチェック
        if (in_array($emailDomain, $blockedDomains, true)) {
            throw new BadRequestHttpException('このメールアドレスのドメインは使用できません。');
        }
        
        // 短時間での連続登録チェック(セッションベース)
        $session = $event->getRequest()->getSession();
        $lastRegistration = $session->get('last_registration_time');
        $currentTime = time();
        
        if ($lastRegistration && ($currentTime - $lastRegistration) < 60) {
            throw new BadRequestHttpException('短時間での連続登録は制限されています。しばらく時間を置いてから再度お試しください。');
        }
        
        // 登録時刻を記録
        $session->set('last_registration_time', $currentTime);
    }
}

EventSubscriberの追加設定

上記ファイルを作成後、以下のコマンドでキャッシュをクリアしてください。

php bin/console cache:clear --no-warmup

注意事項

  • IPアドレスブロック:正当なユーザーもブロックする可能性があるため、慎重に設定してください
  • reCAPTCHA導入:ユーザビリティの低下に注意し、v3(非表示型)の使用を推奨します
  • カスタマイズ実装:必ず動作テストを行い、正常な会員登録が阻害されないことを確認してください
  • ドメイン制限:正当なユーザーが使用している可能性のあるドメインは慎重に判断してブロックリストに追加してください

免責事項

本記事に掲載しているコードや手順は、執筆時点での情報および特定の環境下での動作確認に基づいています。 EC-CUBEのバージョン、サーバー環境、導入済みプラグインとの競合などにより、予期せぬ不具合が発生する可能性があります。

本記事の内容を実行した結果、生じた損害(データの消失、サイトの停止、機会損失など)について、当サイトおよび管理者は一切の責任を負いかねます。 実装にあたっては、必ずバックアップを取得し、検証環境(テスト環境)での動作確認を行った上で、ご自身の責任において実施してください。

この記事は参考になりましたか?

著者プロフィール: 株式会社カジヤ

当社はWeb業界の専門家として、培った経験や技術、自社事業を通して得た知見を土台に、 お客様の事業の成長を後押しすることを提供価値として活動する、Web事業の成長支援会社です。 EC-CUBE公式のパートナー制度「EC-CUBE インテグレートパートナー」に登録してしており、上位11%にあたる「ゴールドランク」に認定された実績があり、新しい通販サイトの構築から、カスタマイズ、リニューアルまで幅広く対応します。

会員登録 の関連記事

会員登録 EC-CUBE 4.2系 / Symfony 5.4 設定変更
会員パスワードの文字制限を変更する方法

EC-CUBE 4.2.0で会員パスワードの文字制限を変更したいという要望があります。 デフォ...

👍 0 / 👎 0 2025年09月23日

セキュリティ強化 の関連記事

管理画面共通 セキュリティ強化 EC-CUBE 4系全般
ロードバランサー経由でも管理画面IP制限を適用させるカスタマイズ方法

ロードバランサー配下にEC-CUBEサーバを構築している環境で、管理画面IP制限設定を実施しようとす...

👍 0 / 👎 0 2025年10月12日

EC-CUBE 4系全般 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日

サービス/コントローラ拡張 の関連記事

メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
マイページ全般 表示/テンプレート調整 EC-CUBE 4系全般
マイページにメール受信履歴ページをカスタマイズする方法

マイページに注文関連のメール履歴を一覧表示する専用ページを作成したいという要望があります。現在のEC...

👍 0 / 👎 0 2025年10月12日
商品 EC-CUBE 4.2系 / Symfony 5.4 サービス/コントローラ拡張
商品登録画面のフリーエリアでTwig構文を使用可能にするカスタマイズ方法

商品登録画面のフリーエリアでTwig構文を使用した画像パスを入力すると、保存時に構文がHTMLエスケ...

👍 0 / 👎 0 2025年09月24日
商品 表示/テンプレート調整 EC-CUBE 4系全般
商品詳細ページに獲得予定ポイントを表示するカスタマイズ方法

商品詳細ページで獲得予定ポイントを表示したいケースがあります。...

👍 0 / 👎 0 2025年09月23日