PHPのサイトを運用していると、「いま使っているバージョンは大丈夫なのか」「どこから確認すればいいのか」が気になります。この記事では、PHPの脆弱性対策を、サポート期限、重大な脆弱性の実例、アプリ側の基本対策の3つに分けて整理します。日付とバージョンは、公式の一覧と脆弱性データベースで確認したものです(2026年10月26日時点)。
① まず
php -v で、バージョンを確認する。② 8.2 のセキュリティ修正は、2026年12月31日で終わる。移行の予定を立てる。
③ 8.1 以前は、公式の対応一覧にもう載っていない。使い続けない。
1. サポート期限を確認する
PHPは、系統(8.2、8.3 のような単位)ごとに、サポートの期間が決まっています。「通常サポート」ではバグ修正とセキュリティ修正が出ます。その後の「セキュリティサポート」では、セキュリティ修正だけが出ます。この期間が終わると、新しい脆弱性が見つかっても、修正は出ません。
| 系統 | 公開 | 通常サポート終了 | セキュリティサポート終了 | 今日(10/26)の状態 |
|---|---|---|---|---|
| 8.2 | 2022/12/8 | 2024/12/31 | 2026/12/31 | セキュリティ修正のみ(あと約2か月) |
| 8.3 | 2023/11/23 | 2025/12/31 | 2027/12/31 | セキュリティ修正のみ |
| 8.4 | 2024/11/21 | 2026/12/31 | 2028/12/31 | 通常サポート中 |
| 8.5 | 2025/11/20 | 2027/12/31 | 2029/12/31 | 通常サポート中 |
公式の一覧(php.net)に載っているのは、この4系統だけです。8.1 以前は載っていないので、サポートが終わっています。レンタルサーバーなどで、管理画面からPHPのバージョンを選べる場合は、8.4 か 8.5 を検討してください。ただし、使っているテーマやプラグインが対応しているかを、先に確認する必要があります。
2. 実例:CVE-2024-4577(PHP-CGIの脆弱性)
サポート内のバージョンでも、更新を怠ると危険な例として、CVE-2024-4577があります。NVDの記載は、次のとおりです。
- 公開日:2024年6月9日(NVD)
- 深刻度:CVSS v3.1 で 9.8(Critical)
- 対象:PHP 8.1.29 より前、8.2.20 より前、8.3.8 より前。「Windows上の Apache + PHP-CGI」で、特定のコードページを使っている場合
- 影響:スクリプトのソースコードが読まれる、サーバー上で任意のPHPコードが実行される、など
- 悪用の状況:CISAの「悪用が確認された脆弱性」の一覧(KEV)に、2024年6月12日に追加されています
Windowsが、コマンドラインの文字を別の文字に置き換える動作(Best-Fit)があります。PHP-CGIが、その置き換わった文字を、PHPへのオプションと解釈してしまうため、外から渡した値でPHPの動作を変えられる、という問題です。同じ「PHP」でも、LinuxでPHP-FPMを使う構成は、NVDの記載する条件に入っていません。
この例から言えるのは、次の2点です。1つ目は、自分の構成が条件に当てはまるかを確認する習慣が大事だということ。2つ目は、公開から数日で悪用が確認されることがあるので、修正版が出たら早めに更新することです。
3. アプリ側の基本対策
PHP本体を更新しても、自分で書いたコードに穴があれば、そこが狙われます。脆弱性の分類としては、OWASPの「Injection」(インジェクション)や「Broken Access Control」(アクセス制御の不備)などが代表的です。PHPで特に意識したい点を挙げます。
| リスク | 起きること | 対策の基本 |
|---|---|---|
| SQLインジェクション | 入力した文字がSQLとして実行され、データを盗まれる・消される | PDOのプリペアドステートメントを使い、SQLに値を直接つなげない |
| クロスサイトスクリプティング(XSS) | 画面に出した入力が、スクリプトとして実行される | 画面に出すときに htmlspecialchars() でエスケープする |
| パスワードの扱い | 漏えい時に、そのまま悪用される | password_hash() / password_verify() で、ハッシュ化して保存する |
| ファイルアップロード | 不正なファイルを置かれ、実行される | 拡張子・種類・サイズを検査し、実行できない場所に保存する |
| エラーの表示 | 内部の情報が外に見える | 本番では display_errors をオフにし、ログに記録する |
| 依存パッケージ | 使っているライブラリの脆弱性を突かれる | composer audit で既知の脆弱性を確認し、定期的に更新する |
今日からできるチェックリスト
php -vで、バージョンを確認する(管理画面や、phpinfo()でも確認できます。確認後にphpinfo()のページは消してください)。- 8.1 以前なら、移行の計画を立てる。8.2 なら、2026年12月31日までに。
- Windowsで、Apache と PHP-CGI を使っていないか確認する。使っているなら、8.1.29・8.2.20・8.3.8 以降にする(または構成を見直す)。
composer auditを実行して、依存パッケージを確認する。- 本番の設定で、
display_errorsがオフになっているか確認する。 - バックアップを取ってから、更新する。更新後は、画面と主要な機能を確認する。
あわせて読みたい
出典と確認について
2026年10月26日時点で、以下の一次情報(公式の一覧・公的機関・脆弱性データベース)を直接確認して書いています。サポート期限は php.net の一覧、CVEの日付・深刻度・対象バージョンは NVD の記載、悪用の確認は NVD に載るCISA KEVの追加日で照合しています。


コメント