PHP 7.4 は PHP2Shell で危険?修正版の有無と移行の手順
PHP 7.4 は PHP2Shell(CVE-2026-109618 / 109619)の影響を受ける。公式の修正版はない。公式の保守も終わっている。今やることと、移行で動かなくなる原因をまとめた。
PHP 7.4 のサイトが PHP2Shell でどれだけ危ないか、修正版の有無、今やることをまとめた。数値はすべて php.net の公式情報にもとづく。
- PHP2Shell の影響:受ける
- 公式の修正版:出ていない
- 公式の保守:2022年11月28日に終了(最終版 7.4.33)
- 判定:危険
PHP 7.4 の状況
| 項目 | 内容 |
|---|---|
| PHP2Shell の影響 | 影響あり |
| 公式の修正版 | なし |
| 公式の保守 | 2022年11月28日に終了(最終版 7.4.33) |
| 判定 | 危険 |
- PHP 7.4 は公式の保守がすでに終わっていて、PHP2Shell の修正版は出ていません。
- サーバー会社が独自に修正を入れている場合もあるが、古い PHP は今後も同じことが起きる。
PHP2Shell で起きること
- ログインなしで、外部からサーバー上のプログラムを実行される
- いちばん危ないのは mod_php(Apache に PHP を組み込む方式)。アプリのプログラムが動く前に攻撃が届く実例がある
- 危険度は CVSS 4.0 で 9.2(10 点満点)
- CVE-2026-109618:メモリ不足の処理の途中で、作りかけのデータを正しいものとして扱ってしまう
- CVE-2026-109619:解放したはずのデータを、同じワーカーの次のリクエストが使ってしまう
今やること
- PHP 8.4 か 8.5 へ移行する。
- 移行の前に、サイトをまるごとバックアップする。
- 先にプラグインとテーマを新しくしておく(移行で壊れにくくなる)。
移行先は PHP 8.4 か 8.5
| 移行先 | 公開日 | 公式の保守 |
|---|---|---|
| PHP 8.4 | 2024年11月21日 | 2028年12月31日まで |
| PHP 8.5 | 2025年11月20日 | 2029年12月31日まで |
保守が長い版に移れば、次に脆弱性が見つかっても修正版を受け取れる。
7.4・8.0・8.1 向けの修正の部品(バックポート)は公式の告知からリンクされているが、正式な版としては出ていない。サーバー会社や延長サポートの会社が独自に修正を入れることもあるが、PHP 自体の保守は戻らない。移行までのつなぎと考える。
移行で動かなくなる主な原因
PHP 7.4 から 8.4 へ移るときに、古いプラグインや古い書き方のプログラムで問題になりやすいもの(php.net の移行ガイドより)。
7.4 から 8.0 への変更
create_function()・each()・money_format()・get_magic_quotes_gpc()などが削除0 == "foo"が false に(数値と文字列の比較の仕方が変わった)- 未定義の定数が、警告ではなくエラーに
- クラス名と同じ名前のメソッドが、コンストラクタとして扱われない
- 非 static メソッドを
Class::method()の形で呼ぶとエラー implode()の逆順の引数が使えない__autoload()が削除(spl_autoload_register()を使う)- PDO の既定のエラーモードが「例外を投げる」に
- 既定の
error_reportingがE_ALLになり、隠れていた警告が出る
8.0 から 8.1 への変更
- 内部関数に null を渡すと非推奨の警告(
strlen(null)など) htmlspecialchars()などの既定がENT_QUOTES | ENT_SUBSTITUTEに- MySQLi が既定でエラー時に例外を投げる
- PDO(MySQL・SQLite)が数値を文字列でなく int / float で返す
- 必須の引数より前にある、既定値つきの引数は必須扱い
8.3 から 8.4 への変更
E_STRICTの定数が非推奨- DBA・ODBC・SOAP の一部で
is_resource()の判定が効かない round()に無効な mode を渡すと ValueError- OPcache の JIT の既定値が変わった(
opcache.jitを明示する) str_getcsv()の区切り文字などの長さの確認が厳しくなった
すぐ更新できないときの応急処置
php.net 公式の一時しのぎ。完全に防げるのは更新だけ。
CVE-2026-109619
session.upload_progress.enabled=0にして、すべてのワーカーを再起動- 設定は php.ini・FPM のプール・サーバーの設定で行う(
ini_set()や.user.iniでは効かない) - PHP 8.5 は
fatal_error_backtraces=0も設定して再起動 - エラーを隠す(
display_errorsや@)だけでは効かない
CVE-2026-109618
memory_limit=-1(FPM のプールか Apache の設定で。ほかの設定で上書きされないようにする)- アップロード不要なら
post_max_size = 8M、必要なら32M(upload_max_filesizeはそれより小さく) - Web サーバーやプロキシで、リクエストの大きさ・項目数・ヘッダー数・入れ子の深さを制限
- メモリの上限はコンテナや cgroup でかける(
RLIMIT_ASやRLIMIT_DATAは使わない)
レンタルサーバーでは、これらを利用者が変えられないことが多い。
移行の手順
- サイトのファイルとデータベースを、まるごとバックアップする
- WordPress なら、本体・プラグイン・テーマを先に新しくする
- テスト用の環境で、新しい PHP で動くか試す
- 本番の PHP を切り替え、トップ・フォーム・管理画面を確かめる
- おかしければ、すぐ元の版に戻す
よくある質問
PHP 7.4 は PHP2Shell の影響を受ける?
受ける。公式の修正版は出ていない。
PHP 7.4 のまま使い続けても大丈夫?
おすすめしない。公式の保守が終わっていて、PHP2Shell の修正版も出ていない。PHP 8.4 か 8.5 への移行が必要。
PHP 7.4 から上げると WordPress は動く?
WordPress 本体は新しい版ほど新しい PHP に対応している。問題になるのは古いプラグインやテーマが多い。テスト環境で確かめてから切り替える。
移行を頼むと費用はどれくらい?
サイトの作りやプラグインの数で変わる。PHP診断では、サイトを確認してから無料で見積もる。
無料ツールPHP2Shell 脆弱性チェッカーPHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かります。参考にした情報
- php.net(2026年10月21日のセキュリティ告知)
- php.net:Supported Versions
- php.net:Unsupported Branches
- php.net:付録(移行ガイド)
2026年10月22日時点の公開情報にもとづく。最新は php.net と、利用中のサーバー会社の告知を確認すること。
PHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かる。移行の相談もできる。
無料で診断する