※当サイトの一部記事には広告を含みます。
うさねこ気まぐれPG開発室

Contact Form 7 海外IPブロック|Cloudflare国コードで国内限定にする方法

本記事で紹介する「Cloudflare国コード(HTTP_CF_IPCOUNTRY)による国内限定」は、Contact Form 7(CF7)の問い合わせフォームにおける軽量スパム対策として、海外からの送信をバリデーション段階で早期に止めるための仕組みです。
※本対策は メール到達性の保証アカウント実在確認を行うものではありません。
※Cloudflare を経由しない環境や、国コードが取得できない環境では、誤ブロック防止のため制限は無効(通過)になります。

※ここで紹介するコードは学習・参考用のサンプルです。環境により動作が異なる場合があるため、本番導入前に必ずテスト環境で検証してください。

Cloudflare国コードを使った国内限定フォームの軽量スパム対策

ねこちゃん
ねこちゃん

また新しいコード書いたって?

うさちゃん
うさちゃん

国内限定フォームの軽量スパムで検証するだけの小物ツール🐰💻

ねこちゃん
ねこちゃん

いつものことでなんかよくわかんないけど、なんかすごそう!!!


この記事で実装できること

Cloudflare が提供している 国コード情報(HTTP_CF_IPCOUNTRY) を利用して、

  • 日本(JP)のみ許可
  • それ以外は送信前に停止
  • CF7のバリデーション段階で早期終了(※本サンプルは 必須メール項目(email*)があるフォーム を前提にしています)
  • DNSチェックやメール処理を発生させない

という 低負荷なフィルタリング処理 を実装します。


なぜこの方法が「軽量」なの?

多くのスパム対策は、

  • DNSチェック
  • reCAPTCHA
  • API通信
  • JavaScript検証

など、外部通信や追加処理が必要です。

一方この方法は、

👉 文字列比較だけ(国コードを見るだけ)

なので、処理コストがほぼゼロです。

つまり、

  • サーバー負荷がほとんど増えない
  • 入口で止められる
  • Bot対策として効率が良い

という特長があります。


仕組み

Cloudflare利用時、リクエストヘッダに以下が自動付与されます。
HTTP_CF_IPCOUNTRY: JP
※この値は Cloudflareを経由している場合のみ前提にできる情報です(Cloudflare未使用環境では取得できない/信頼できないため、本記事の実装でも「取得できない場合は通す」設計にしています)

HTTP_CF_IPCOUNTRY: JP

これを利用して、

  • JP → 通す
  • それ以外 → 停止

という単純な分岐を行います。


実装コード

add_filter('wpcf7_validate_email*', 'usaneko_cf7_country_block', 10, 2);

function usaneko_cf7_country_block($result, $tag){

  // 管理者は通す(テスト用)
  if ( is_user_logged_in() ) return $result;

  $country = '';

  if ( !empty($_SERVER['HTTP_CF_IPCOUNTRY']) ) {
    $country = strtoupper($_SERVER['HTTP_CF_IPCOUNTRY']);
  }

  // 国コードが取れない環境は誤判定防止のため通す
  if ($country === '') return $result;

  // 日本以外は停止
  if ($country !== 'JP') {

    $result->invalidate(
      $tag,
      '現在このフォームは国内からのご利用を想定しています。'
    );
  }

  return $result;
}

導入前の注意点(重要)

この方法は 「国内専用フォーム向け」 の設計です。

以下のようなケースでは、正規ユーザーも利用できなくなる可能性があります。

  • 海外からのアクセス
  • 海外在住の日本人ユーザー
  • VPN / プロキシ利用者
  • 企業ネットワーク経由
  • 国コード取得に失敗する特殊環境

また、Cloudflare を使用していない場合は国コードが取得できないため、自動的に制限は無効(通過) になります。


この対策が向いているサイト

  • 国内ユーザー限定の企業サイト
  • 日本語のみの問い合わせフォーム
  • 営業・見積専用フォーム
  • 個人ブログの連絡窓口

向いていないサイト

  • 海外ユーザーが利用するサービス
  • 多言語サイト
  • グローバル展開している企業
  • 海外からの問い合わせが想定される窓口

海外アクセスも受け付けたい場合は?

「完全ブロック」ではなく、次の方式がおすすめです。

  • Cloudflare WAF Challenge(確認画面)
  • Turnstile / reCAPTCHA
  • レート制限
  • DNSチェック併用

「拒否」ではなく「確認」方式にすると誤判定が減ります。


メリット

  • 処理が非常に軽い
  • DNSやAPI通信が不要
  • サーバー負荷を抑えられる
  • 実装が簡単
  • Botアクセス削減に有効

この記事のまとめ

  • Cloudflare国コードでアクセス元を判定可能
  • 国内専用フォームでは有効な選択肢
  • 低負荷でスパムを減らせる
  • 正規ユーザーの誤ブロックに注意
  • 用途に応じて導入可否を判断する

この方法は 万能な防御策ではなく、あくまで「運用を楽にする補助フィルター」 です。

DNSチェック・Turnstile・WAFなどと組み合わせることで、より安定したフォーム運用が可能になります。

「最近フォームが荒れてきたな…」と感じたら、選択肢のひとつとして検討してみてください。

本記事は学習・参考用の実装例です。実運用への適用可否はサイトの目的や利用者属性(海外利用/VPN/企業回線等)によって変わるため、最終判断は運用者の責任で行ってください。導入後の機会損失や不達・誤判定について当方は保証できません。

WordPress+Cocoonを始めるなら「エックスサーバー」がおすすめ!

「これからWordPress+Cocoonでブログを作りたい!」という方には、
国内シェアNo.1の高速レンタルサーバー エックスサーバーがぴったりです。

  • 🚀 WordPressクイックスタート対応(最短10分でブログ開設)
  • 🪄 Cocoonテーマの自動インストールにも対応
  • 🔒 無料独自SSL/高セキュリティ/自動バックアップ完備
  • ☁️ 高速SSD・安定稼働率99.99%以上
  • 💰️ スタンダード 月額料金 990円~  693円~(キャンペーン中なら) 2025/11現在

「WordPress × Cocoon」を最もスムーズに始められる環境が整っています。
👉 今すぐチェック:レンタルサーバー エックスサーバー

最新のサービス価格は公式サイトでご確認ください。

免責事項

本記事のサンプルプログラムは、学習・参考用として掲載しているもので、動作や結果を保証するものではありません。 利用する場合は、ご自身の環境に合わせて確認しながらお使いください。万が一トラブルや損害が発生した場合でも、当サイトでは責任を負いかねます。

広告
プレミアムプラン ふるさと納税

※本文中に記載の会社名・製品名・サービス名・ゲームタイトル名等は、各社の商標または登録商標であり、権利は各社に帰属します。

※サンプルはテストを行っていますが、すべての環境での動作を保証するものではありません。ご利用は自己責任でお願いいたします。

※本記事の仕様・価格・対応状況等は執筆時点で確認できた情報をもとに掲載しています。最新の情報はメーカー公式サイトをご確認ください。

※当サイトでは一部の記事において、アイキャッチ画像にAI生成を使用しています。