緊急PHPに致命的な脆弱性(CVSS 9.2)。Amazon Linux 2 のphp8.2(Extras)にも修正最新情報 ›
無料で相談する

WAFとは? Cloudflareの無料プランでWordPressを守る設定と限界|php2shellで注目

公開:10/22 08:40更新 (日本時間)Webセキュリティ診断センター 編集部約14分で読めます
WAFとは? Cloudflareの無料プランでWordPressを守る設定と限界|php2shellで注目
#WAF#Cloudflare#WordPress#php2shell
この記事の要点
  • WAF(Webアプリケーションファイアウォール)は、サイトの手前で通信を調べ、攻撃らしいものを止める仕組みです。たとえるなら門の前に立つ警備員です。
  • php2shellでは、Cloudflareが日本時間 10月21日 12:02 から、無料プランを含むWAFの利用者を既定で守ったと発表しています。無料プランの利用者は設定の操作をしなくてよいとしています[Cloudflare]。
  • ただしWAFが調べるのは、Cloudflareを通ってくる通信だけです。サーバーのIPアドレスに直接届く「裏口」をふさがないと、警備員の横を素通りされます。
  • WAFは時間を稼ぐための策です。Cloudflare自身も、PHP本体の更新が必要だとしています[Cloudflare]。

WAFとは:門の前に立つ警備員

WAFはWeb Application Firewallの略です。Webサイトに届く通信を手前で調べて、既知の攻撃のパターンに当てはまるものを止めます。

このサイトでは、Webサイトをお店、PHPの脆弱性を玄関ドアの欠陥、攻撃者を泥棒にたとえて説明しています(泥棒のたとえで分かるphp2shell)。このたとえでいうと、WAFは門の前に立つ警備員です。怪しい人を門で止めてくれますが、ドアの欠陥そのものは直りません。警備員が知らない手口で来られたり、門を通らずに裏口から回られたりすると止められません。

たとえ実際のもの
お店WordPressなどで作ったWebサイト
玄関ドアの欠陥PHPの脆弱性(php2shell)
門の前の警備員WAF(Cloudflareなど)
裏口サーバーのIPアドレスに直接届く道
ドアの交換PHPを修正版に更新すること

php2shellでCloudflareがしたこと

Cloudflareは 2026年10月21日のブログで、php2shellへの対応を次のように説明しています[Cloudflare]。

つまり、すでにCloudflareの後ろにあるサイトは、無料プランでも警備員が新しい手口を覚えた状態になっていました。Cloudflareを使っていないサイトには、この防御は届いていません。発見の経緯や他社の対応は「php2shellの海外動向」にまとめています。

WordPressをCloudflareの後ろに置く手順(概要)

サイトをCloudflareの後ろに置くとは、訪問者の通信がいったんCloudflareを通ってからサーバーに届くようにすることです。Cloudflareの開発者向けドキュメントにある流れを、大まかに並べます。細かい画面の操作は公式ドキュメントで確認してください。

  1. ドメインをCloudflareに追加する:Cloudflareのアカウントを作り、ダッシュボードでドメインを追加してプランを選びます。無料プランで使えるのは「フルセットアップ」という方式です[Cloudflare Docs]。
  2. DNSレコードを確かめる:Cloudflareが既存のDNSレコードを自動で読み取りますが、すべてを見つけられるとは限らないとしています。Webサイト、www、メール(MXなど)のレコードが揃っているかを、元のDNSの設定と見比べます[Cloudflare Docs]。
  3. ネームサーバーを切り替える:ドメインを買った会社(レジストラ)の管理画面で、ネームサーバーをCloudflareが指定したものに書き換えます。DNSSECを使っている場合は、先にレジストラ側で止めておく必要があります。止めずに切り替えると、ドメインにつながらなくなるおそれがあります。反映には最大24時間かかるとされています[Cloudflare Docs]。
  4. プロキシをオンにする(オレンジの雲):DNSレコードの「プロキシ状態」を「プロキシ済み」にすると、管理画面でオレンジの雲のアイコンになります。この状態のレコードだけがCloudflareを通り、WAFの検査を受けます。「DNSのみ」(灰色の雲)にしたレコードは、サーバーの本当のIPアドレスを答えてしまいます[Cloudflare Docs]。
  5. SSL/TLSの暗号化モードを「フル(厳密)」にする:Cloudflareはできる限り「Full (strict)」を選ぶよう勧めています。サーバー側に、期限内で、ドメイン名と合った証明書(公的な認証局かCloudflare Origin CAが発行したもの)が必要です。条件を満たさないと 526 エラーになります[Cloudflare Docs]。
「フレキシブル」を選ぶと表示されなくなることがある
暗号化モードの「Flexible」は、Cloudflareからサーバーまでを暗号化せずに送ります。サーバー側でhttpsへの転送をしていると、転送が繰り返されてサイトが表示されなくなる、とCloudflareは注意しています。ログイン画面があるサイトではFullかFull (strict)を使うよう勧めています[Cloudflare Docs]。WordPressは管理画面へのログインがあるので、Full (strict)を目指します。

なお、ネームサーバーを切り替えるとドメインのDNS全体の管理がCloudflareに移ります。メールの設定が抜けると、メールが届かなくなります。会社のメールと同じドメインを使っている場合は、切り替え前の確認に時間をかけてください。

無料プランで使える主な機能

Cloudflareの料金ページでは、無料プランにWAF、Free Managed Ruleset、DDoS攻撃への対策、SSL証明書が含まれています[Cloudflareプラン]。WordPressを守るうえで関係する機能を、開発者向けドキュメントの記載から整理しました。上限の数はドキュメントを確認した時点のものです。

機能無料プランでの扱い注意点
Free Managed Ruleset全プランで使える。影響が大きく、広く悪用されている脆弱性を対象にするphp2shellのルールはここに入った。より広い「Cloudflare Managed Ruleset」はPro以上
カスタムルール5つまで作れる(正規表現は使えない)国やURLを条件に、ブロックや確認画面を出す設定ができる
レート制限ルール1つまで。条件に使えるのはパスなど。数える単位はIPアドレス、数える期間は10秒ログイン画面への連続アクセスを抑える用途が考えられる。細かい条件は有料プラン
Bot Fight Mode無料で有効にできる。既知のボットに似た通信に、計算の負荷が高い確認をかけるAPIやスマホアプリの通信にも確認がかかることがある。カスタムルールで例外を作れない

レート制限は、決まった時間に同じ相手から来るリクエストの数を数え、上限を超えたら止める機能です[Cloudflare Docs]。Bot Fight Modeは、外部のサービスがWordPressのAPIを呼び出している場合などに、その通信まで止めることがあります。オンにしたら、問い合わせフォームや決済、外部連携が動くかを確かめてください[Cloudflare Docs]。

WordPressならではの注意点

ログイン中のページをキャッシュしない

Cloudflareは、初期設定ではHTMLをキャッシュしません。表示を速くしようと「すべてキャッシュする」ルールを作ると、動的な内容を含むページも保存されます。Cloudflareは、その場合に別の訪問者向けの情報が表示されるおそれがあると注意し、Cookieの有無などで対象から外す方法を挙げています[Cloudflare Docs]。WordPressでは、ログイン中の画面、会員ページ、カートや注文の画面が当たります。HTMLのキャッシュを使うなら、これらを必ず対象から外してください。

管理画面(/wp-admin)をCloudflare Accessで守る

Cloudflare Accessは、指定したURLを開く前に本人確認をはさむ機能です。Zero Trustという製品群の一つで、無料のプランがあります(申し込みの際に支払い情報の入力は必要ですが、無料プランは課金されないとしています)[Cloudflare Docs]。Accessのアプリケーションは初期状態ですべて拒否で、許可のポリシーに合う人だけが入れます。

WordPressで使うときは、守る範囲に注意します。WordPressのプラグインが使うAJAXの通信は、すべてwp-admin/admin-ajax.phpに送る決まりで、公開側のページから送るものも含まれます[WordPress Developer]。/wp-adminをまるごとAccessの内側に入れると、フォームの送信など表側の機能が動かなくなることがあります。admin-ajax.phpを外すか、対象をwp-login.phpと管理画面に絞るなど、設定後に表側の動作を確かめてください。

またCloudflareは、Accessを通らずに届いた通信を断るため、サーバー側でAccessが発行するトークンを確かめるよう求めています[Cloudflare Docs]。ここでも、次の節で説明する裏口の問題が出てきます。

最大の弱点:裏口からの直接アクセス

訪問者と攻撃者の通信がCloudflare(門の警備員=WAF)を通ってから自社のサーバーに届く図。攻撃者がサーバーのIPアドレスに直接送る裏口の道は検査されない。下に、裏口のふさぎ方として、CloudflareのIPだけ許可、Authenticated Origin Pulls、Cloudflare Tunnelの3つ
図1 WAFが守るのは門を通る通信だけ。裏口をふさぐ方法は3つ

CloudflareのWAFが調べるのは、Cloudflareを通ってくる通信だけです。攻撃者がサーバー(オリジン)のIPアドレスを知っていれば、Cloudflareを通さずに直接送れます。Cloudflareのドキュメントも、Authenticated Origin Pullsを使わない場合、IPアドレスを知った人はCloudflareのすべての防御を迂回してリクエストを送れると書いています[Cloudflare Docs]。

IPアドレスが知られる経路

Cloudflareは、サーバーを守るために次の点を挙げています[Cloudflare Docs]。

裏口のふさぎ方

Cloudflareのドキュメントは、オリジンを守る方法をいくつか挙げています。どれも全プランで使えるとされています[Cloudflare Docs]。

方法しくみCloudflareの評価と注意
CloudflareのIPアドレスだけを許可サーバーのファイアウォールで、CloudflareのIPアドレス以外からの接続を断る「ある程度安全」。IPアドレスのなりすましには弱い。CloudflareのIPアドレスを誤って止めると、訪問者が誰もサイトに届かなくなる
Authenticated Origin PullsCloudflareがサーバーに証明書を見せ、サーバーはそれを確かめた接続だけを受ける「とても安全」。暗号化モードがFullかFull (strict)であることが前提。Cloudflare共通の証明書では「Cloudflareから来た」ことしか保証されないので、自分のアカウント専用にするなら自前の証明書を使う
Cloudflare Tunnelサーバーにcloudflaredを入れ、サーバーからCloudflareへ外向きにつなぐ。外からの受け付けを閉じられる「とても安全」。サーバーにソフトを入れる必要がある

共用のレンタルサーバーでは、ファイアウォールの設定やソフトの導入を契約者が自由にできない場合があります。その場合、Cloudflareを入れても裏口は開いたままです。Webサーバーの設定を変えられるかどうか、サーバー会社のマニュアルや窓口で確かめてください。php2shellの暫定策としてのWAFの効き目は、「php.iniの設定変更やWAFで防げる?」でも比べています。

Cloudflare以外の選択肢

レンタルサーバーの中には、サーバー会社が用意したWAFの機能を持つものがあります。たとえばConoHa WINGは、機能一覧に「Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護する」WAFを載せています[ConoHa WING]。

サーバー会社のWAFはサーバー側で通信を調べるので、Cloudflareのような裏口の問題は起こりにくくなります。一方で、どの攻撃のパターンをいつ追加するかは各社しだいです。php2shellへの対応状況は、各社の告知で確かめてください。各社の告知は「レンタルサーバー各社の対応状況まとめ」に一覧にしています。管理画面でWAFをオフにしている場合は、オンに戻す前に、フォームの送信や更新の操作が止められないかを確かめます。

WAFは時間稼ぎ。PHPの更新は必要

警備員がいても、ドアの欠陥は残ったままです。Cloudflareは、WAFの保護があってもPHPを更新するよう求め、WAFは追加の防御層だとしています[Cloudflare]。PHP公式も、完全な対策は更新だけだとしています[php.net]。

WAFを入れたからといって、PHPの更新を後回しにはできません。修正版はPHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 です。自社サイトのバージョンは「PHPのバージョンを確認する方法」で確かめられます。脆弱性の中身は「php2shellの解説」をご覧ください。更新前に入り込まれていないかも確かめておくと安心です(乗っ取られていないか確かめる方法)。

チェックリスト

よくある質問

無料プランでもphp2shellの防御は入っていますか?

Cloudflareは、無料プランを含むWAFの利用者に既定で入れたとしています。無料プランの利用者は操作をしなくてよいとしています[Cloudflare]。ただし、サイトの通信がCloudflareを通っている(プロキシ済みになっている)ことが前提です。

いまからCloudflareを入れれば、PHPの更新は待てますか?

待てません。WAFは既知の手口を止めるもので、PHPの欠陥は残ります。ネームサーバーの切り替えには最大24時間かかることもあり、裏口をふさぐ設定も必要です。修正版が出ているいまは、PHPの更新を先に進めてください。

Cloudflareを入れるとサイトが表示されなくなることはありますか?

あります。DNSレコードの写し漏れ、DNSSECを止めずにネームサーバーを切り替えること、暗号化モードとサーバーの証明書の食い違い(526 エラーや転送の繰り返し)が、Cloudflareのドキュメントに挙がっている典型例です。切り替え前に、元のDNSの設定を控えておいてください。

レンタルサーバーのWAFとCloudflareは両方使えますか?

併用はできます。ただしCloudflare経由の通信は、サーバーから見るとCloudflareのIPアドレスから届きます。Cloudflareのドキュメントは、大量の通信が少数の送り元から来るように見えるため、サーバー側の自動ブロックやレート制限にかかることがあると注意しています[Cloudflare Docs]。併用する場合は、サーバー会社の案内も確かめてください。

Cloudflareの設定やPHPの更新をWebセキュリティ診断センターに頼むこともできます
Cloudflareへの切り替え、SSLの設定、裏口をふさぐオリジン保護、WordPressの管理画面の守り方、修正版へのPHPの更新と動作確認までお手伝いします。無料相談はこちら

参考にした情報

貴社のサイトに合った対応をご案内します!
まずは、お気軽にご相談ください。

お問い合わせ・お見積りはこちら
無料で相談する最新情報を見る