30秒で判断
- 対応すべき人: Express 5.x/4.xを利用しており、クエリ文字列のパース(
qs経由)を行っている方。とくに外部入力由来のクエリ文字列を扱うアプリケーション。 - 対応不要な人: Expressを使用していない方、クエリ文字列のパース機能を使っていない、または別のパーサーに置き換えている方。
- 確認コマンド:
npm list express(またはnpm view express version)で現在のバージョンを確認。
この変更が意味すること
Express 5.3.0 は、HTTPヘッダーの仕様準拠を改善するバグ修正と、依存パッケージqsの脆弱性修正を含むリリースです。リリースノートに破壊的変更の記載はありません。
とくにqsの更新はCVE修正を伴うため、クエリ文字列を処理するアプリケーションでは優先的に取り込みを検討する価値があります。
主な変更点
res.send()のHTTPヘッダー不整合を修正
res.send()でContent-LengthとTransfer-Encodingの両ヘッダーが同時に付与されてしまう不具合が修正されました。HTTP仕様に準拠し、Transfer-Encodingヘッダーが存在する場合はContent-Lengthヘッダーを付与しないよう変更されています。なお、ETagの生成はこの変更の影響を受けません。
qsを^6.16.0に更新しCVEを修正
クエリ文字列パーサqsが^6.16.0に更新され、CVE-2026-2391(GHSA-w7fw-mjwx-w883)およびCVE-2026-82417が修正されました。
EOL / サポート状況
| バージョン | ステータス | EOL |
|---|---|---|
| 5 | active | 未定 |
| 4 | active | 未定 |
| 3 | eol | 2015-07-05 |
| 2 | eol | 2012-07-01 |
| 1 | eol | 2011-03-01 |
現行の5系・4系はいずれもEOL予定日未定でメンテナンスが継続しています。3系以前はすでにEOLです。
開発者への影響
- HTTPヘッダーの仕様準拠が改善されるため、
Transfer-Encodingを使うレスポンスで予期しないContent-Lengthヘッダーが付与される問題が解消します。 qsの脆弱性修正を含むため、とくに外部入力由来のクエリ文字列を処理するアプリケーションでは早めの更新を推奨します。- 破壊的変更の記載はないため、通常のバージョンアップとして取り込み可能です。
アップデート方法
# バージョン確認
npm view express version
# 更新
npm install express@5.3.0
アップデート後は、クエリ文字列を利用するエンドポイントとレスポンスヘッダーの挙動をテスト環境で確認してから本番へ適用してください。
データソース: GitHub Releases API, endoflife.date, npm Registry AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
export const impactScoreData = {
"total": 45,
"level": "medium",
"label": "影響度: 中(qsの脆弱性修正を含む)",
"factors": [
{"name": "Breaking Changes", "score": 0, "maxScore": 40},
{"name": "新機能", "score": 0, "maxScore": 25},
{"name": "バグ修正", "score": 10, "maxScore": 20},
{"name": "セキュリティ", "score": 12, "maxScore": 15},
{"name": "依存関係", "score": 10, "maxScore": 15}
]
};
export const eolData = [
{"range": "5", "status": "active", "eolDate": null},
{"range": "4", "status": "active", "eolDate": null},
{"range": "3", "status": "eol", "eolDate": "2015-07-05"},
{"range": "2", "status": "eol", "eolDate": "2012-07-01"},
{"range": "1", "status": "eol", "eolDate": "2011-03-01"}
];
export const breakingChangesData = {
"count": 0,
"items": []
};
export const updateAdviceData = {
"rating": 4,
"maxRating": 5,
"label": "qsの脆弱性修正を含むため早めのアップデートを推奨",
"shouldUpdate": [
"外部入力由来のクエリ文字列を処理している",
"qs経由でクエリ文字列をパースしている"
],
"canWait": [
"Expressを使用していない",
"クエリ文字列のパース機能を使っていない"
]
};
export const versionNavData = {
"previousVersion": "5.2.1",
"nextVersion": null
};
export const actionGuideData = {
"evaluation": {
"priority": "high",
"actionRequired": "recommended"
},
"action": {
"steps": [
"テスト環境で5.3.0へのアップデートを検証する",
"クエリ文字列を利用するエンドポイントの動作を確認する",
"本番環境に適用する"
],
"skipIf": [
"Expressを使用していない",
"クエリ文字列のパース機能を使っていない、または別のパーサーに置き換えている",
"すでに5.3.0以降を利用している"
],
"notes": ["外部入力由来のクエリ文字列を処理しているアプリケーションは優先的に対応してください"]
},
"impact": {
"targets": ["Express利用者"],
"scope": "wide"
},
"changeCategory": "セキュリティ修正"
};
