PHP 脆弱性 の修正とブランチ移行
まず配布元の PHP2Shell バックポートを確認し、PHP 7.4 から 8.4 への移行をテストします。修正によって EOL ブランチの上流サポートが復活するわけではありません。アプリと拡張機能を検証してから本番のブランチを変更してください。
PHP 8.0 の互換性変更
以下は PHP 公式移行ガイドの要約です。拡張機能固有の変更は原文も確認してください。
- 変更内容
クラスと同名のメソッドはコンストラクターとして動作しなくなります。__construct() を使用します。
コードで確認する箇所クラス名と同じ名前のメソッドを持つクラス。
PHP 8.0 の公式移行ガイド ↗ - 変更内容
非 static メソッドを static として呼び出せなくなります。
コードで確認する箇所クラス名からインスタンスメソッドを static 呼び出ししている箇所。
PHP 8.0 の公式移行ガイド ↗ - 変更内容
数値と数値以外の文字列の緩い比較規則が変わります。
コードで確認する箇所緩い比較や文字列と数値を混在させた検証。
PHP 8.0 の公式移行ガイド ↗
PHP 8.1 の互換性変更
以下は PHP 公式移行ガイドの要約です。拡張機能固有の変更は原文も確認してください。
- 変更内容
$GLOBALS 配列全体への書き込みはサポートされなくなります。
コードで確認する箇所$GLOBALS 配列全体への代入。
PHP 8.1 の公式移行ガイド ↗ - 変更内容
必須引数の前の省略可能引数も必須として扱われます。
コードで確認する箇所既定値のある引数の後に必須引数がある関数定義。
PHP 8.1 の公式移行ガイド ↗ - 変更内容
継承されたメソッドは親メソッドと static 変数を共有します。
コードで確認する箇所継承メソッド内の static 変数。
PHP 8.1 の公式移行ガイド ↗
PHP 8.2 の互換性変更
以下は PHP 公式移行ガイドの要約です。拡張機能固有の変更は原文も確認してください。
- 変更内容
標準文字列関数の大文字・小文字変換は locale 依存ではなく ASCII ベースになります。
コードで確認する箇所strtolower()、strtoupper()、locale に依存する比較。
PHP 8.2 の公式移行ガイド ↗ - 変更内容
str_split() は空文字列に対して空配列を返します。
コードで確認する箇所空要素が一つ入った配列を想定するコード。
PHP 8.2 の公式移行ガイド ↗ - 変更内容
open_basedir が全パスを制限すると glob() は空配列を返します。
コードで確認する箇所glob() の結果を false と厳密に比較する箇所。
PHP 8.2 の公式移行ガイド ↗
PHP 8.3 の互換性変更
以下は PHP 公式移行ガイドの要約です。拡張機能固有の変更は原文も確認してください。
- 変更内容
range() の境界値の型やステップ値の検証が厳密になります。
コードで確認する箇所オブジェクト、配列、ゼロや負のステップを渡す呼び出し。
PHP 8.3 の公式移行ガイド ↗ - 変更内容
number_format() の decimals が負の場合、小数点より前で丸めます。
コードで確認する箇所number_format() の負の decimals 引数。
PHP 8.3 の公式移行ガイド ↗ - 変更内容
日付処理でより具体的な例外・エラークラスを使用します。
コードで確認する箇所DateTime の生成と例外ハンドラー。
PHP 8.3 の公式移行ガイド ↗
PHP 8.4 の互換性変更
以下は PHP 公式移行ガイドの要約です。拡張機能固有の変更は原文も確認してください。
- 変更内容
exit() と die() は通常の型変換を行い、不正な入力で TypeError を投げる場合があります。
コードで確認する箇所文字列でも整数でもない値を渡す呼び出し。
PHP 8.4 の公式移行ガイド ↗ - 変更内容
PHP_DEBUG と PHP_ZTS 定数は真偽値になります。
コードで確認する箇所これらの定数と整数の厳密比較。
PHP 8.4 の公式移行ガイド ↗ - 変更内容
round() は不正な丸めモードで ValueError を投げます。
コードで確認する箇所独自の丸めモードや動的に選択するモード。
PHP 8.4 の公式移行ガイド ↗
PHP 切り替え前の準備
- ファイル、設定、データをバックアップし、復元手順を確認します。
- 検証環境で移行先 PHP と本番と同じ拡張機能を使用します。
- 依存関係、アプリ、プラグイン、テーマの互換性を確認します。
- ログイン、アップロード、メール、定期処理、キュー、異常系をテストします。
- 移行先パッケージに PHP 脆弱性 の修正があり、ブランチがサポート期間内であることを確認します。
PHP 脆弱性:環境別の更新手順を選択
PHP2Shell 対応時のロールバックと復元
正確なパッケージ・イメージ参照と検証済み復元手順を残します。移行失敗時は設定とデータを整合する形で復元してください。脆弱なランタイムに戻すと危険も戻るため、再公開前にベンダー告知を確認します。
PHP 脆弱性 対応後の確認
重要なリクエスト、ログイン、アップロード、ログ、定期処理、バックグラウンドワーカーをテストします。Web 用 PHP をすべて再起動し、各サイトの実行バージョンを確認してください。配布元と完全なリビジョンを記録し、EOL ブランチは移行も計画します。
バージョン確認 →