リソースの解放と入力の安全性

ライブラリの更新で、例外の種類・ストリームの扱い・既定の上限が変わることがあります。更新した箇所と、ライブラリを通る入出力について確かめます。

リソースの解放

  • ストリーム(InputStream・OutputStream)、接続、クライアントのオブジェクトを、正常時も異常時も閉じている(try-with-resources など)
  • ライブラリが一時ファイルを作る場合、保存先・権限(Windows の ACL)・処理後の削除を確かめる
  • 接続プール・スレッドプールを使う場合、停止時に解放される
  • 大きな要求・応答を、上限なしにメモリへ読み込んでいない
  • 異常な入力を繰り返しても、メモリ・CPU・スレッド・一時ファイルが増え続けない

入力の安全性

  • 外部からの入力(パラメーター・ヘッダー・本文・ファイル)を検証している
  • XML を扱う場合、DOCTYPE・外部エンティティ・外部 DTD を含む入力が拒否される
  • 圧縮された入力を扱う場合、展開後の大きさと処理時間に上限がある
  • 例外の応答やエラー画面に、スタックトレース・ローカルのパス・認証情報・入力値をそのまま出していない
  • ファイル名を受け取る場合、パスの差し込み(..)・予約名・絶対パスを拒否する

設定が無いことを「安全」とみなさないでください。既定値はバージョンによって変わることがあります。バージョンページの「設定を見直す」と「更新だけでは塞がらない脆弱性」を合わせて見てください。

共通手順書の章

  1. 作業の全体像
  2. 開発環境と前提
  3. 作業前の準備
  4. 更新前の記録
  5. 利用箇所の調べ方
  6. 依存定義の更新
  7. IDE への反映
  8. 解決されたバージョンの確認
  9. コンパイルエラーの切り分け
  10. import の一括置き換え(javax → jakarta)
  11. 非推奨の警告の扱い
  12. 概算工数の出し方
  13. リソースの解放と入力の安全性
  14. ビルド・テスト・WAR の確認
  15. 他の JAR に同梱された複製
  16. 再スキャン
  17. 変更差分の確認と完了条件
  18. ロールバックと作業記録
  19. 検証環境等への配備