PHPサイトのセキュリティ対策:PHP 8.2のサポート終了前に確認すべきこと
PHPで動く企業サイトのセキュリティ対策を、サポート期限、プラグインのリスク、サーバー設定、コードの書き方の順に整理。日本語Windows環境で悪用されたCVE-2024-4577も解説します。
この記事のポイント
- PHP 8.2へのセキュリティ修正は2026年12月31日に終了します。8.1や7系はすでにサポート対象外です。
- W3Techsによると、サーバー側言語が判明しているサイトの69.2%がPHPを使い、そのうち34.5%がいまだにPHP 7以前で動いています。
- WordPress関連で2025年に見つかった11,334件の脆弱性のうち91%はプラグインにあり、集中的に狙われたものは公開から中央値5時間で悪用されました。
- CVE-2024-4577は日本語・中国語のコードページを使うWindows上のPHP-CGIに影響し、2025年1月以降、日本の組織への攻撃に使われました。
PHPは企業サイトに使っても安全なのか
PHPはいまもWebの標準的な言語です。W3Techsの2026年10月時点のデータでは、サーバー側言語が判明しているWebサイトの69.2%がPHPを使っています。WordPress、多くの共用レンタルサーバー、そして古い自社開発の業務システムの多くがここに含まれます。言語そのものは活発に保守されており、各ブランチには2年間の通常サポートと、その後2年間のセキュリティ修正が提供されます。
つまり問うべきは「PHPが安全か」ではなく、「自社サイトがサポート中のバージョン、保守されているプラグイン、安全なコードで動いているか」です。同じW3Techsのデータでは、PHPサイトの26.8%がバージョン7、7.7%がバージョン5で動いており、いずれもセキュリティ修正は提供されていません。リスクの大半はここにあります。
PHPのサポート期限:セキュリティ修正が続くバージョン
PHPプロジェクトはサポート期間をphp.netで公開しています。サポートが終了したブランチについては、修正されない脆弱性にさらされる可能性があるため、できるだけ早くアップグレードするよう案内しています。2026年10月時点でサポートされているのは次の4つです。
いま最も重要なのは2026年12月31日です。サイトやサーバープランがPHP 8.2なら、8.3以降への検証と移行に残された時間は約2か月です。8.4や8.5へ一気に上げれば、次のアップグレードまでの期間を長く取れます。
- PHP 8.2:セキュリティ修正は2026年12月31日まで。
- PHP 8.3:通常サポートは2025年12月31日に終了、セキュリティ修正は2027年12月31日まで。
- PHP 8.4:通常サポートは2026年12月31日まで、セキュリティ修正は2028年12月31日まで。
- PHP 8.5(2025年11月20日リリース):通常サポートは2027年12月31日まで、セキュリティ修正は2029年12月31日まで。
- PHP 8.1、8.0、7系、5系:サポート終了。セキュリティ修正はありません。
最大のリスクはPHP本体ではなくプラグイン
PatchstackのState of WordPress Security in 2026レポートによると、2025年にWordPress関連で新たに見つかった脆弱性は11,334件で、2024年より42%増えました。このうち91%がプラグイン、9%がテーマにあり、WordPress本体はわずか6件でいずれも優先度の低いものでした。Patchstackは、そのうち4,124件(36%)を実際の脅威と判断しています。
同じレポートの2つの数字は、更新の運用を見直す理由になります。集中的に狙われた脆弱性では、最初の悪用までの加重中央値が5時間でした。また、46%の脆弱性は公開時点で開発者による修正がありませんでした。月1回の更新作業では前者に間に合わず、後者にはそもそも効果がありません。自社開発のPHPアプリケーションでComposerのパッケージを使う場合も同じで、依存しているコードはすべて自社が責任を負うコードです。
- 使っていないプラグインやパッケージは削除する。無効化しただけでは外部から到達できる場合があります。
- 検証体制が許す範囲で、プラグインのセキュリティ更新を自動化する。
- 使っているプラグインやパッケージの脆弱性情報を購読し、未修正の公開情報も当日中に把握できるようにする。
- 自社開発のPHPアプリケーションでは、ビルド工程でcomposer auditを実行する。
CVE-2024-4577:日本語版Windowsのサーバーが狙われた理由
CVE-2024-4577は、PHPのバージョンと同じくらい、設定やロケールが重要になることを示した脆弱性です。PHP公式のアドバイザリによると、Windows上のPHP-CGIに引数インジェクションの欠陥があり、リモートから任意のコードを実行できます。原因はWindowsの「Best-Fit」文字変換で、対象はコードページ932・936・950、つまり日本、中国、香港、マカオ、シンガポール、台湾で使われるシステムロケールです。アドバイザリは、Windows版XAMPPの既定のインストールがそのままで脆弱だったと指摘しています。修正はPHP 8.3.8、8.2.20、8.1.29で提供されました。
Cisco Talosは2025年3月、遅くとも2025年1月から、この脆弱性を悪用した攻撃が主に日本の組織を対象に行われていたと報告しました。対象はテクノロジー、通信、エンターテインメント、教育、ECの各業界です。日本企業や、日本のチームが構築したサーバーを使うカナダ企業が確認すべきことはシンプルです。WindowsでPHPをCGIとして動かさないこと、XAMPPなどの開発用パッケージを本番で使わないこと、マイナーバージョンだけでなくパッチバージョンまで確認することです。
コードで押さえるべきPHPのセキュリティ対策
OWASP Top 10:2025では、1位がアクセス制御の不備(Broken Access Control)、続いてセキュリティ設定のミス、ソフトウェアサプライチェーンの不備、暗号化の失敗、インジェクションの順です。その多くは、PHPコードのいくつかの習慣に対応しています。PHPのコードベースをレビューするとき、ITLが最初に確認するのは次の項目です。
- アクセス制御:データを読む・変更するすべてのリクエストで、サーバー側で権限を確認する。画面上のリンクを隠すだけでは不十分です。
- インジェクション:すべてのクエリでPDOまたはmysqliのプリペアドステートメントを使い、リクエストの値を文字列連結でSQLに組み込まない。
- クロスサイトスクリプティング:出力先に応じてエスケープする。HTMLならhtmlspecialchars()を使うか、既定でエスケープするテンプレートエンジンを使う。
- パスワード:password_hash()で保存し、password_verify()で照合する。md5()やsha1()はパスワードに使わない。
- セッションとフォーム:セッションCookieにHttpOnly・Secure・SameSiteを設定し、ログイン後にセッションIDを再生成し、データを変更するフォームにはCSRFトークンを付ける。
- ファイルアップロード:種類とサイズをサーバー側で検査し、公開ディレクトリの外に保存し、アップロードされたファイルがPHPとして実行されないようにする。
PHPサイトのサーバー設定チェックリスト
セキュリティ設定のミスはOWASP Top 10:2025の2位で、PHPサイトでは開発時の設定がそのまま残っていることが典型です。以下はコードを変えずに半日ほどで確認できる項目です。
- 本番ではdisplay_errorsをOffにしてエラーはログに出力し、スタックトレースやファイルパスを訪問者に見せない。
- expose_phpをOffにして、レスポンスヘッダーでPHPのバージョンを公開しない。
- phpinfo()のページ、インストーラー、バックアップ、.envファイルを公開ディレクトリから削除する。
- PHPはCGIではなくPHP-FPMで動かし、Webサーバーのアカウントが書き込めるのは必要なファイルだけに限定する。
- サイト全体をHTTPSで配信し、管理画面は多要素認証で保護する。
- 暗号化したバックアップをサーバー外に保管し、復元を少なくとも一度は試す。
今週できるPHPサイトのセキュリティ点検
PHPサイトを所有していても自社で保守していない場合、最大のリスクを見つけるのにコードを読む必要はありません。開発会社やサーバー会社に、次の質問を上から順に確認してください。順番は前述のデータに沿っています。侵害の入口になりやすいのはサポート切れのバージョンと外部の部品なので、コードレビューより先に確認します。
回答は日付とともに記録しておきます。点検は繰り返してこそ意味があり、記録した回答が次回の比較基準になります。
- 本番環境のPHPの正確なバージョンは何か。そのブランチのセキュリティ修正はいつ終わるか。
- どのプラグイン、テーマ、Composerパッケージが入っているか。そのうち過去1年間リリースがないものはどれか。
- セキュリティ更新はどれくらいの速さで適用されるか。修正のない脆弱性が公開されたとき、誰に通知が届くか。
- 古い社内ツールも含め、WindowsでPHPをCGIとして動かしている環境はないか。
- 管理画面のログインは多要素認証で保護されているか。最後にバックアップからの復元に成功したのはいつか。
アップグレードか、強化か、作り直しか:古いPHPサイトの判断基準
PHP 8.2や8.3で動き、プラグインも保守されているサイトなら、多くの場合ステージング環境で検証してからサーバー管理画面でバージョンを切り替えるだけです。作業は数日程度で、その大半はフォーム、決済、管理画面の動作確認です。
PHP 7や5で動くサイトでは、バージョンの切り替え自体が難しいことはまれです。本当のコストは、対応版のないプラグインやライブラリと、削除された関数に依存する独自コードです。主要な部品のうち複数が保守終了しているなら、修正のコストと、保守されている技術での作り直しを比べましょう。どちらを選ぶにしても、現在のPHPブランチのサポート終了日を、ドメインや証明書の更新日と同じカレンダーに入れておけば、次の期限に慌てずに済みます。
著者
Jayson Hao
Innovation Trigger Lab創業者。トロント大学コンピュータサイエンス(AI/ML)出身。RAG、AIチャットボット、Web・モバイルプロダクトの設計と本番導入に携わっています。
プロフィールを見るよくある質問
2026年でもPHPは安全に使えますか?
サポート中のブランチを使っていれば安全に使えます。セキュリティ修正が提供されているのはPHP 8.2〜8.5で、8.1以前は対象外です。PHPサイトの侵害の多くは、言語そのものではなく古いバージョンやプラグインが原因です。
PHP 8.2のサポートはいつ終わりますか?
PHP 8.2のセキュリティ修正は2026年12月31日までです。それ以降はサポート終了となるため、8.3以降へのアップグレードが必要です。
自社サイトのPHPバージョンはどうやって確認できますか?
サーバーの管理画面を確認するか、サーバー上でphp -vを実行します。確認のためにphpinfo()のページを公開したままにすると、設定情報が攻撃者に見えてしまうので避けてください。
CVE-2024-4577の影響を受けていますか?
XAMPPの既定設定のように、WindowsでPHPをCGIモードで動かしていて、バージョンが8.3.8、8.2.20、8.1.29より古い場合に影響を受けます。確認されている対象は、日本語または中国語のシステムロケールのサーバーです。
出典・参考資料
- 1.サポートされているバージョンThe PHP Group (php.net)
- 2.WebサイトにおけるPHPの利用統計W3Techs, 2026年10月25日
- 3.PHP RCE:CVE-2012-1823の回避によるPHP-CGIの引数インジェクション(CVE-2024-4577)PHP (php-src GitHub Security Advisory), 2024年9月28日
- 4.日本を狙う新たな持続的攻撃の実態Cisco Talos, 2025年3月6日
- 5.WordPressセキュリティの現状 2026Patchstack, 2026年2月25日
- 6.OWASP Top 10:2025OWASP Foundation
