
- 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]。
- 10月上旬からWAFのルールを作り、公表の約9時間前に配備した。
- 10月21日 3:02 UTC(日本時間 12:02)から、無料・有料のWAFを使う利用者は既定で守られていた。
- 無料プラン向けのルールは「Cloudflare Managed Free Ruleset」に入れた。無料プランの利用者は、有効にするための操作をしなくてよい。
- 有料プラン(Pro・Business・Enterprise)向けのルールは「Cloudflare Managed Ruleset」に入れた。有料プランの利用者には、このルールセットがブロックの設定で動いているかを確かめるよう求めている。
- リクエストだけでなく、サーバーからの応答も見て判断する新しい仕組みを作り、無料プランを含む全プランに入れた。
- 問題はPHP本体にあるため、サイトのコードやプラグインの更新だけでは直らない。WAFを有効にしたまま、PHPを更新するよう勧めている。
つまり、すでにCloudflareの後ろにあるサイトは、無料プランでも警備員が新しい手口を覚えた状態になっていました。Cloudflareを使っていないサイトには、この防御は届いていません。発見の経緯や他社の対応は「php2shellの海外動向」にまとめています。
WordPressをCloudflareの後ろに置く手順(概要)
サイトをCloudflareの後ろに置くとは、訪問者の通信がいったんCloudflareを通ってからサーバーに届くようにすることです。Cloudflareの開発者向けドキュメントにある流れを、大まかに並べます。細かい画面の操作は公式ドキュメントで確認してください。
- ドメインをCloudflareに追加する:Cloudflareのアカウントを作り、ダッシュボードでドメインを追加してプランを選びます。無料プランで使えるのは「フルセットアップ」という方式です[Cloudflare Docs]。
- DNSレコードを確かめる:Cloudflareが既存のDNSレコードを自動で読み取りますが、すべてを見つけられるとは限らないとしています。Webサイト、www、メール(MXなど)のレコードが揃っているかを、元のDNSの設定と見比べます[Cloudflare Docs]。
- ネームサーバーを切り替える:ドメインを買った会社(レジストラ)の管理画面で、ネームサーバーをCloudflareが指定したものに書き換えます。DNSSECを使っている場合は、先にレジストラ側で止めておく必要があります。止めずに切り替えると、ドメインにつながらなくなるおそれがあります。反映には最大24時間かかるとされています[Cloudflare Docs]。
- プロキシをオンにする(オレンジの雲):DNSレコードの「プロキシ状態」を「プロキシ済み」にすると、管理画面でオレンジの雲のアイコンになります。この状態のレコードだけがCloudflareを通り、WAFの検査を受けます。「DNSのみ」(灰色の雲)にしたレコードは、サーバーの本当のIPアドレスを答えてしまいます[Cloudflare Docs]。
- 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が調べるのは、Cloudflareを通ってくる通信だけです。攻撃者がサーバー(オリジン)のIPアドレスを知っていれば、Cloudflareを通さずに直接送れます。Cloudflareのドキュメントも、Authenticated Origin Pullsを使わない場合、IPアドレスを知った人はCloudflareのすべての防御を迂回してリクエストを送れると書いています[Cloudflare Docs]。
IPアドレスが知られる経路
Cloudflareは、サーバーを守るために次の点を挙げています[Cloudflare Docs]。
- 「DNSのみ」のレコード(SPFのTXTレコードなど)に、サーバーのIPアドレスが書かれていないか確かめる。
- できれば、Webサイトと同じサーバーでメールを動かさない。存在しない宛先へのメールが送り主に戻るとき、メールサーバーのIPアドレスが分かるため。
- Cloudflareに移したあと、サーバーのIPアドレスを変える。DNSの記録は公開されていて、Cloudflareに移る前のIPアドレスが過去の記録に残るため。
裏口のふさぎ方
Cloudflareのドキュメントは、オリジンを守る方法をいくつか挙げています。どれも全プランで使えるとされています[Cloudflare Docs]。
| 方法 | しくみ | Cloudflareの評価と注意 |
|---|---|---|
| CloudflareのIPアドレスだけを許可 | サーバーのファイアウォールで、CloudflareのIPアドレス以外からの接続を断る | 「ある程度安全」。IPアドレスのなりすましには弱い。CloudflareのIPアドレスを誤って止めると、訪問者が誰もサイトに届かなくなる |
| Authenticated Origin Pulls | Cloudflareがサーバーに証明書を見せ、サーバーはそれを確かめた接続だけを受ける | 「とても安全」。暗号化モードが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の解説」をご覧ください。更新前に入り込まれていないかも確かめておくと安心です(乗っ取られていないか確かめる方法)。
チェックリスト
- PHPを修正版に更新したか(レンタルサーバーなら、サーバー会社の適用完了の告知を確かめたか)
- WebサイトのDNSレコードが「プロキシ済み」(オレンジの雲)になっているか
- SSL/TLSの暗号化モードがFull (strict)になっていて、サイトがエラーなく表示されるか
- 有料プランなら、Cloudflare Managed Rulesetがブロックの設定で動いているか
- 「DNSのみ」のレコードやSPFに、サーバーのIPアドレスが出ていないか
- サーバーがCloudflare以外からの接続を受け付けない設定になっているか(IPの許可、Authenticated Origin Pulls、Tunnelのいずれか)
- HTMLをキャッシュしている場合、ログイン中・会員・カートのページを対象から外しているか
- Accessで管理画面を守る場合、
admin-ajax.phpを使う表側の機能が動くか - Bot Fight Modeをオンにしたあと、フォーム・決済・外部連携が動くか
よくある質問
無料プランでも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への切り替え、SSLの設定、裏口をふさぐオリジン保護、WordPressの管理画面の守り方、修正版へのPHPの更新と動作確認までお手伝いします。無料相談はこちら
参考にした情報
- Cloudflare:Cloudflare deploys protections against php2shell vulnerability(2026年10月21日)
- Cloudflare:Plans(料金プラン)
- Cloudflare Docs:Managed Rules / Custom rules / Rate limiting rules / Bot Fight Mode
- Cloudflare Docs:Change your nameservers (Full setup) / Proxy status / Full (strict) / Flexible
- Cloudflare Docs:Default cache behavior / Cache Everything
- Cloudflare Docs:Protect your origin server / Authenticated Origin Pulls / Cloudflare Tunnel / Cloudflare IP addresses
- Cloudflare Docs:Publish a self-hosted application to the Internet(Access) / Get started(Zero Trust)
- WordPress Developer Resources:AJAX
- ConoHa WING:機能一覧
- php.net「Security advisory: Critical remote code execution vulnerabilities, update now」


