PHP/Symfony バージョンアップ時に確認するComposerコマンドまとめ

## 目的

PHP 8.0.25 → PHP 8.2.7 へバージョンアップ作業を行いました。
その際に Composer 周りの脆弱性のあるパッケージが含まれてないか調査しました。
Symfony 5.4.13 を使用しており、今回はフレームワークのバージョンアップは実施しません。

## ローカルでvendor配下を更新してないか

`vendor` 配下がどういうわけかGitで管理されているプロジェクトでした。
`vendor` 配下が更新されていてアップデートできないのではないか？という不安がありました。

その疑念を解消する神コマンドがありました。

```
$ composer status -v
No local changes
```

変更がないのでひと安心です。

## プラットフォーム要件が満たされていることを確認する

`check-platform-reqs` コマンドは 現在のプラットフォーム（PHPや拡張モジュールなど）が、プロジェクトの `composer.json` ファイルに定義された依存関係の要件を満たしているかどうかを確認します。

```
$ composer check-platform-reqs
Checking platform requirements for packages in the vendor dir
composer-plugin-api 2.6.0      success
ext-bcmath          8.2.7      success
ext-ctype           8.2.7      success
ext-dom             20031129   success
ext-iconv           8.2.7      success
ext-json            8.2.7      success
ext-libxml          8.2.7      success
ext-mbstring        *          success provided by symfony/polyfill-mbstring
ext-pcre            8.2.7      success
ext-phar            8.2.7      success
ext-simplexml       8.2.7      success
ext-tokenizer       8.2.7      success
ext-xml             8.2.7      success
ext-xmlwriter       8.2.7      success
php                 8.2.7      success
```

ここでエラーが出た場合はその環境でプラットフォーム要件が満たされてないことが分かるので、対応しましょう。
各環境で一度実行して確認しておくと良いでしょう。

## インストールされたパッケージのセキュリティ脆弱性勧告をチェックする

`composer audit` コマンドは脆弱なパッケージがないか調べてくれます。

```
$ composer audit
Found 5 security vulnerability advisories affecting 5 packages:
+-------------------+----------------------------------------------------------------------------------+
| Package           | aws/aws-sdk-php                                                                  |
| Severity          | medium                                                                           |
| CVE               | CVE-2023-51651                                                                   |
| Title             | Potential URI resolution path traversal in the AWS SDK for PHP                   |
| URL               | https://nvd.nist.gov/vuln/detail/CVE-2023-51651                                  |
| Affected versions | >=3.0.0,<3.288.1                                                                 |
| Reported at       | 2023-11-22T00:00:00+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
+-------------------+----------------------------------------------------------------------------------+
| Package           | guzzlehttp/psr7                                                                  |
| Severity          | medium                                                                           |
| CVE               | CVE-2023-29197                                                                   |
| Title             | Improper header validation                                                       |
| URL               | https://github.com/guzzle/psr7/security/advisories/GHSA-wxmh-65f7-jcvw           |
| Affected versions | >=2,<2.4.5|<1.9.1                                                                |
| Reported at       | 2023-04-17T16:00:00+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
+-------------------+----------------------------------------------------------------------------------+
| Package           | symfony/http-kernel                                                              |
| Severity          | medium                                                                           |
| CVE               | CVE-2022-24894                                                                   |
| Title             | CVE-2022-24894: Prevent storing cookie headers in HttpCache                      |
| URL               | https://symfony.com/cve-2022-24894                                               |
| Affected versions | >=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.4.0|>=2.4.0,<2.5.0|>=2.5 |
|                   | .0,<2.6.0|>=2.6.0,<2.7.0|>=2.7.0,<2.8.0|>=2.8.0,<3.0.0|>=3.0.0,<3.1.0|>=3.1.0,<3 |
|                   | .2.0|>=3.2.0,<3.3.0|>=3.3.0,<3.4.0|>=3.4.0,<4.0.0|>=4.0.0,<4.1.0|>=4.1.0,<4.2.0| |
|                   | >=4.2.0,<4.3.0|>=4.3.0,<4.4.0|>=4.4.0,<4.4.50|>=5.0.0,<5.1.0|>=5.1.0,<5.2.0|>=5. |
|                   | 2.0,<5.3.0|>=5.3.0,<5.4.0|>=5.4.0,<5.4.20|>=6.0.0,<6.0.20|>=6.1.0,<6.1.12|>=6.2. |
|                   | 0,<6.2.6                                                                         |
| Reported at       | 2023-02-01T08:00:00+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
+-------------------+----------------------------------------------------------------------------------+
| Package           | symfony/twig-bridge                                                              |
| Severity          | medium                                                                           |
| CVE               | CVE-2023-46734                                                                   |
| Title             | CVE-2023-46734: Potential XSS vulnerabilities in CodeExtension filters           |
| URL               | https://symfony.com/cve-2023-46734                                               |
| Affected versions | >=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.4.0|>=2.4.0,<2.5.0|>=2.5 |
|                   | .0,<2.6.0|>=2.6.0,<2.7.0|>=2.7.0,<2.8.0|>=2.8.0,<3.0.0|>=3.0.0,<3.1.0|>=3.1.0,<3 |
|                   | .2.0|>=3.2.0,<3.3.0|>=3.3.0,<3.4.0|>=3.4.0,<4.0.0|>=4.0.0,<4.1.0|>=4.1.0,<4.2.0| |
|                   | >=4.2.0,<4.3.0|>=4.3.0,<4.4.0|>=4.4.0,<4.4.51|>=5.0.0,<5.1.0|>=5.1.0,<5.2.0|>=5. |
|                   | 2.0,<5.3.0|>=5.3.0,<5.4.0|>=5.4.0,<5.4.31|>=6.0.0,<6.1.0|>=6.1.0,<6.2.0|>=6.2.0, |
|                   | <6.3.0|>=6.3.0,<6.3.8                                                            |
| Reported at       | 2023-11-10T08:00:00+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
+-------------------+----------------------------------------------------------------------------------+
| Package           | twig/twig                                                                        |
| Severity          | high                                                                             |
| CVE               | CVE-2024-45411                                                                   |
| Title             | Twig has a possible sandbox bypass                                               |
| URL               | https://github.com/advisories/GHSA-6j75-5wfj-gh66                                |
| Affected versions | >=3.0.0,<3.11.1|>=3.12.0,<3.14.0|>=2.0.0,<2.16.1|>=1.0.0,<1.44.8                 |
| Reported at       | 2024-09-09T20:19:26+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
```

こんな感じで発見してくれます。
指摘箇所はすべて直した方がよいですが、highレベルなものから優先度高くして対応すると良いでしょう。

`composer update` するだけで直るパッケージもありました。
必要に応じて `composer.json` を編集してパッケージのバージョンを引き上げて `composer update` しましょう。

詳細はURLからそれぞれ確認しましょう。
最終的に問題がなくなればokです。

```
$ composer audit
No security vulnerability advisories found.
```

## Composer.json, lock を検証する

`composer.json`, `composer.lock` の書き方に問題ないか検証してくれます。

```
$ composer validate
./composer.json is valid
```

## さいごに

今回のバージョンアップ作業では、Composerの便利なコマンドを活用して、ローカルの変更確認、プラットフォーム要件の確認、セキュリティ脆弱性のチェックを行いました。これにより、システムの安全性と信頼性を保ちつつ、最新の(?)PHPバージョンに対応できました。

セキュリティ対応や依存パッケージの管理は、プロジェクトの安定性に直結するため、定期的に監視・更新を行うことが大切です。今後も脆弱性の監視やプラットフォーム要件の確認を怠らず、安心して開発を続けられる環境を維持していきましょう。