SC Workbook
科目 A-2 · システム開発技術

../ の除去処理の回避

Linux 上で動作する Web アプリケーションに,パラメタ file で指定されたファイルの内容を返す次の処理がある。replace は,文字列を先頭から 1 回だけ走査し,一致した "../" をそれぞれ空文字列に置き換える。file には URL デコード後の値が渡され,/etc/passwd はアプリケーションの実行ユーザが読み出せるものとする。

String name = request.getParameter("file");
name = name.replace("../", "");
File f = new File("/var/app/docs/" + name);
// f の内容を応答として返す

攻撃者が /etc/passwd の内容を読み出せる file の値はどれか。

  1. ア../../../etc/passwd
  2. イ/etc/passwd
  3. ウ....//....//....//etc/passwd
  4. エ..\..\..\etc\passwd
正解と解説を見る

正解 ウ

この問題の基礎知識

  • ディレクトリトラバーサルは,ファイル名に「../」などを含めて,意図したディレクトリの外にあるファイルを読み書きさせる攻撃である。
  • 特定の文字列を 1 回だけ走査して除去する処理では,除去した結果として前後の文字がつながり,除去したはずの文字列が新たにできることがある。
  • Linux のパスの区切り文字は「/」であり,「\」は通常の文字として扱われる。また,連続した「/」は一つの「/」と同じに扱われる。
  • 根本的な対策は,basename などでディレクトリ名を除いたファイル名だけを用いることや,正規化した後のパスが基準のディレクトリの中にあることを確認することである。
ア../../../etc/passwd

三つの "../" はいずれも replace で除去され,name は etc/passwd になる。開かれるのは /var/app/docs/etc/passwd であり,基準のディレクトリの外には出られない。

イ/etc/passwd

この処理は固定のディレクトリ名の後ろに文字列を連結しているので,絶対パス名を与えても /var/app/docs//etc/passwd となり,/var/app/docs/etc/passwd を指す。open(filename) のように値をそのまま使う実装とは異なる。

ウ....//....//....//etc/passwd正解

"....//" の中央にある "../" が除去されると,前の ".." と後ろの "/" がつながり "../" が新たにできる。name は ../../../etc/passwd となり,/etc/passwd を指す。除去による無害化に頼らず,basename でファイル名だけを取り出すなどの対策が必要である。

エ..\..\..\etc\passwd

Linux ではバックスラッシュはディレクトリの区切り文字ではないので,この値は全体が一つのファイル名として扱われ,/var/app/docs の中のファイルを指す。Windows 上で動作する場合には区切り文字として解釈され得る。

検証用の出典出典照合済み
IPA 安全なウェブサイトの作り方 改訂第 7 版(1.3 パス名パラメータの未チェック/ディレクトリ・トラバーサル) / OWASP Input Validation Cheat Sheet(Common Pitfalls: Denylisting or “cleaning” input) / Java SE API: java.lang.String#replace(CharSequence, CharSequence)
照合の根拠(5 件)

Java 21 で検算: s.replace("../","") の結果と new File("/var/app/docs/"+n).getCanonicalPath() は,ア→etc/passwd→/var/app/docs/etc/passwd,イ→/etc/passwd→/var/app/docs/etc/passwd,ウ→../../../etc/passwd→/etc/passwd,エ→変化なし→/var/app/docs/..\..\..\etc\passwd。

問題 ID A2-SDV-0514 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。