WebサイトのPHP実行環境を確認・更新する|古い実行環境の脆弱性解消

当ページは検証・整備中のドラフトです。
内容は実環境での検証や追加調査により変更される予定です。
参照:ページ公開・更新ポリシー

WordPressやEC-CUBEなど、PHPで構築されたWebサイトは、サーバ上のPHP実行環境を利用して動作している。

CMS本体やプラグインを更新していても、その下で動作するPHPが古ければ、PHP自体の脆弱性は別に残る。PHPにはバージョンごとにサポート期間があるため、現在の実行環境を確認し、サポート対象のバージョンを維持する必要がある。

PHP実行環境とWebサイトの関係

PHPは、サーバ上でプログラムを実行するための言語・実行環境である。

WordPressをはじめ、多くのCMSやWebアプリケーションがPHPを利用している。利用者がブラウザからWebサイトへアクセスすると、PHPで実行された処理の結果がHTMLなどとして返される。

概念的には、次のような関係になる。

Webサイト
   ↓
CMS・Webアプリケーション
   ↓
PHP実行環境
   ↓
Webサーバ・OS

CMSが安全な状態でも、その下で動作するPHPが同じ状態とは限らない。そのため、PHPもWebサイトを構成する一つの管理対象として扱う。

PHPのバージョンとサポート期間

PHPには複数のバージョンがあり、それぞれにサポート期間が設定されている。

サポート期間中はバグやセキュリティ上の問題が修正され、その後はセキュリティ修正のみが提供される期間へ移行する。すべてのサポートが終了するとEOL(End of Life)となり、公式の修正対象から外れる。

サポート終了後もPHPが突然動作しなくなるわけではない。しかし、新たな脆弱性が発見されても公式のセキュリティ修正を受けられない。

したがって、Webサイトが正常に動作していることと、PHPを安全に継続利用できることは別に判断する必要がある。

現在のPHPバージョンを確認する

最初に、Webサイトが使用しているPHPのバージョンを確認する。

レンタルサーバでは、サーバの管理画面から確認できることが多い。CMSによっては、管理画面のシステム情報などにもPHPバージョンが表示される。

確認したバージョンを、PHP公式の「Supported Versions」に掲載されている最新のサポート状況と照合する。

PHPの状態判断
通常サポート中継続利用できる
セキュリティサポート中セキュリティ修正は提供される。サポート終了時期を確認して移行を準備する
サポート終了サポート対象バージョンへの移行を進める

PHPのサポート状況は時間とともに変化する。記事内に固定したバージョン一覧だけで判断せず、PHP公式の情報を確認する。

PHPを更新できる環境を確認する

次に、利用しているサーバで選択できるPHPバージョンを確認する。

レンタルサーバでは複数のPHPバージョンが用意され、管理画面からWebサイトごとに切り替えられることがある。自分で管理するサーバでは、OSやパッケージ管理などを通じてPHPを更新する。

確認するのは、主に次の3点である。

  1. 現在使用しているPHPバージョン
  2. サーバで利用できるPHPバージョン
  3. Webサイト側が対応しているPHPバージョン

サーバ側で新しいPHPを選択できても、WebサイトがそのPHPで正常に動作することは別の問題である。

Webサイト側の対応状況を確認する

PHPを変更する前に、Webサイトを構成するソフトウェアが移行先のPHPへ対応しているか確認する。

WordPressであれば、WordPress本体だけでなく、使用中のテーマ、プラグイン、独自に追加したPHPコードなども確認対象になる。

EC-CUBEなど別のCMSを利用している場合も同様に、開発元が示す動作環境や対応PHPバージョンを確認する。

WordPressを利用している場合は、WordPress公式の「必須要件」から、現在推奨されているPHP環境も確認する。

PHP公式でサポートされているバージョンであっても、利用しているCMSやその構成要素が対応していなければ、そのまま更新先にはできない。

移行するPHPバージョンを決める

更新先は、単純に最も新しいPHPを選べばよいわけではない。

移行先は、

  • PHP公式のサポート対象であること
  • 利用しているCMSが対応していること
  • テーマやプラグインなどの構成要素が対応していること

を満たすバージョンから選択する。

PHPのサポート終了が近いバージョンへ移行すると、短期間で再び更新が必要になる。複数の対応バージョンを選べる場合は、サポート期間も確認して移行先を決める。

PHP更新前の状態を確認する

PHPの変更はWebサイト全体へ影響するため、問題が発生した場合に元の状態へ戻せるようにしておく。

サイトのファイルとデータベースについて、復旧に利用できるバックアップが存在することを確認する。

また、現在正常に動作している主要機能も把握しておく。更新後の状態と比較することで、PHP変更によって発生した問題を判断しやすくなる。

検証環境を利用できる場合は、本番環境より先にPHPを変更して動作を確認する。

PHPを更新する

移行先のPHPへの対応状況とバックアップを確認したら、PHPバージョンを変更する。

レンタルサーバでは、管理画面から対象のドメインやWebサイトを選択してPHPバージョンを変更する方式が一般的である。

PHPの変更方法や適用範囲はサーバによって異なるため、利用しているホスティングサービスの手順を確認して実施する。

変更後は、Webサイトが実際に新しいPHPで動作していることも確認する。

更新後の動作を確認する

PHPの更新による問題は、Webサイト全体が表示されなくなるような明確なものだけではない。

公開ページが表示できても、一部のプラグインや機能だけでエラーが発生することもある。
「WordPressのテーマで特定のブロックだけ表示がエラーになる」という事例も実際にあった。そのため、できる限り全ページ(商品ページなど同一パターンで大量のページがある場合は代表的なページのみ)を確認する。

WordPressサイトであれば、公開ページ、管理画面、ログイン、問い合わせフォーム、検索、画像アップロードなどが確認対象になる。

ECサイトでは、商品表示、カート、注文、決済など、事業上重要な処理も確認する。

問題が発生した場合は、必要に応じてPHPを変更前の状態へ戻し、CMS、テーマ、プラグイン、独自コードなどから原因を切り分ける。

PHPを更新できない原因を確認する

CMSやプラグインなどが新しいPHPに対応しておらず、PHPを更新するとWebサイトが正常に動作しないことがある。

この場合、PHPを元のバージョンへ戻せば一時的にサイトを復旧できる。しかし、そのPHPがサポート終了しているなら、古い実行環境を使用する問題は残ったままとなる。

PHPを更新できない
        ↓
対応していない構成要素を確認
        ↓
CMS・テーマ・プラグイン・独自コードなどを
更新・交換・修正
        ↓
PHPをサポート対象バージョンへ移行

PHPを更新できない原因がWebサイト側にある場合は、その構成要素を更新・交換・修正し、サポート対象のPHPへ移行できる状態を作る。

PHP実行環境を継続して管理する

現在サポートされているPHPも、将来はサポート終了を迎える。

そのため、Webサイトの定期点検時にはCMSやプラグインだけでなく、PHPの状態も確認する。

現在のPHPバージョン
        ↓
PHP公式のサポート状況
        ↓
CMSなどの対応状況
        ↓
必要ならPHPを更新
        ↓
Webサイトの動作確認

PHPはWebサイトの表面からは見えにくいが、CMSやWebアプリケーションを動かす実行環境である。

現在のPHPバージョンとサポート状況を把握し、Webサイト側との互換性を確認しながらサポート対象のPHPへ更新する。 これにより、古いPHP実行環境に残る脆弱性を解消できる。