ディレクトリトラバーサル(directory traversal)
ファイル名の指定に「1つ上へ」を混ぜ、公開していない場所のファイルを読み出す攻撃。
もう少し詳しい説明
ディレクトリトラバーサルは、ファイル名の指定に「1つ上の階層へ」を混ぜて、公開していない場所のファイルを読み出す攻撃です。
ディレクトリはフォルダのことです。トラバーサル(traversal)は「横断する」という意味で、フォルダの階層をたどって移動することを指しています。
どうやって外へ出るのか
Webサイトには、公開してよいファイルを置くフォルダが決まっています。画像や資料は、その中に置きます。
利用者が資料を選ぶと、?file=manual.pdf のような形でファイル名が送られ、サーバ(要求を受け取って、応えを返す側の機械)がその名前のファイルを探して返します。名前を受け取って、そのまま探しに行く作りです。
ここで、ファイル名のかわりにこう送られたらどうなるか。
?file=../../etc/passwd
../ は「1つ上の階層へ」を表す書き方です。2つ重ねれば、2つ上へ出ます。
サーバが受け取った名前をそのまま使うと、公開フォルダの外へ出てしまいます。
何が読まれると困るのか
公開フォルダの外には、見せるつもりのないファイルが置かれています。
- 設定ファイル … データベースにつなぐためのIDとパスワードが書かれていることがある
- 秘密鍵のファイル … 暗号で使う鍵
- 利用者の一覧
- ソースコード … 中を読まれると、ほかの弱点も見つけやすくなる
いちばん重いのは設定ファイルです。ここにデータベースのパスワードが平文(そのまま読める形)で書かれていると、1つ読まれただけで、データ全部に手が届きます。
対策
根っこは1つです。利用者から受け取った文字を、そのままファイルの場所として使わないこと。
| 対策 | やること |
|---|---|
| 受け取った名前を使わない | 番号などで受け取り、サーバ側が持つ対応表からファイル名を決める |
../ を拒む | 相対パスを表す文字が入っていたら受け付けない |
| 絶対パスに直してから確かめる | たどった結果が公開フォルダの中かどうかを、最後に見る |
| 権限を絞る | Webサーバを動かす利用者に、公開フォルダの外を読む権限を与えない |
いちばん確実なのは1つ目です。文字を受け取らなければ、混ぜ込む余地がありません。
2つ目の「../ を拒む」は、単純に見えて漏れやすい手です。..%2f のように別の書き方に化けさせるやり方があり、文字列を見るだけの検査はすり抜けられます。そのため3つ目、たどった結果を見るほうが確実です。
同じ型の攻撃
この攻撃は、SQLインジェクションやクロスサイトスクリプティングと同じ型をしています。
利用者が入力した文字が、ただの文字として扱われず、命令や場所の指定として働いてしまう。
| 攻撃 | 混ぜ込まれるもの | どこで働くか |
|---|---|---|
| ディレクトリトラバーサル | ../(場所の指定) | サーバのファイルを探すところ |
| SQLインジェクション | SQL文の断片 | データベースへの問合せ |
| クロスサイトスクリプティング | スクリプト | 閲覧者のブラウザ(Webページを見るためのソフト) |
3つとも、入力の扱いが甘いことが原因です。覚えるときは、混ぜ込まれるものが何かで分けてください。
試験ではこう出る
科目A(旧・午前)のセキュリティ分野で出ます。多いのは、攻撃の説明を選ばせる問題です。「相対パスを使って、公開対象外のファイルにアクセスする」という表現が答えになります。
似た攻撃と並べて選ばせる形も定番です。SQLインジェクション・クロスサイトスクリプティング・DoS攻撃(大量の通信を送りつけて、サービスを提供できなくする攻撃)が誤答として並びます。混ぜ込まれるものが何かで見分けてください。
対策を選ばせる問題では、「利用者の入力をファイル名として直接使わない」が答えになります。選択肢に「ファイアウォール(通してよい通信とそうでない通信をより分ける仕組み)で防ぐ」とあれば誤りです。通信としては正しい形で届くので、通信を見るだけの仕組みでは止まりません。
関連する用語
- SQLインジェクション
- 入力した文字が、そのまま命令として扱われる点が同じ型の攻撃
- クロスサイトスクリプティング
- こちらも入力の扱いが甘いと起きる。混ぜ込まれるのがスクリプトである点が違う
- サイバーキルチェーン
- 攻撃を段階に分けた枠組み。この攻撃は弱点を突く段にあたる
- ハッシュ関数
- 設定ファイルにパスワードを置くときは、そのものではなくハッシュ値にする
ミニクイズ
ディレクトリトラバーサル攻撃の説明として、最も適切なものはどれか。
正解は 1番:ファイル名の指定に相対パスを混ぜ、公開対象外のファイルを読み出す
ディレクトリトラバーサルは、ファイル名の指定に「1つ上の階層へ」を表す相対パスを混ぜることで、公開しているフォルダの外にあるファイルへ届いてしまう攻撃です。traversal は「横断する」という意味で、フォルダの階層をたどって移動することを指しています。SQL文の断片を混ぜるのはSQLインジェクション、スクリプトを混ぜるのはクロスサイトスクリプティング、大量の通信でサービスを止めるのはDoS攻撃です。混ぜ込まれるものが何かで見分けられます。
この分野をまとめて解く → セキュリティのミニテスト(全47問)
最終更新:2026-11-05