最終更新日:2026年5月15日
sg sg-security-overview threat_vulnerability unauthorized_access data_leakage
まず結論
ディレクトリトラバーサル攻撃は、ファイル名やパスを指定する入力を悪用して、本来アクセスできないファイルを閲覧・取得しようとする攻撃です。
SG試験では、
../のような親ディレクトリ指定- ファイル名をパラメータで受け取るWebアプリケーション
- サーバ内の設定ファイルや機密ファイルの不正参照
が出てきたら、ディレクトリトラバーサル攻撃を疑います。
ポイントは、データベースを攻撃するのではなく、サーバ内のファイルをたどる攻撃だと切り分けることです。
直感的な説明
Webアプリケーションで、次のようなURLがあるとします。
https://example.com/download?file=manual.pdf
この場合、アプリケーションは manual.pdf というファイルを探して利用者に返します。
しかし、攻撃者が次のように入力したらどうでしょうか。
https://example.com/download?file=../../secret.txt
../ は、1つ上のフォルダに戻る指定です。
つまり、攻撃者は「本来の保存場所」から外に出て、想定外のファイルを探そうとしています。
たとえるなら、受付で「資料Aをください」と言う代わりに、保管庫の奥にある非公開ファイルの場所まで指定して取り出そうとする行為です。
SG試験では、ファイル名・パス・相対パスが出てきたときに、まずこのイメージを思い出すと判断しやすくなります。
定義・仕組み
ディレクトリトラバーサル攻撃は、Webアプリケーションが外部から受け取ったファイル名やパスを十分に確認せず、そのままファイル操作に使ってしまうことで発生します。
IPAの「安全なウェブサイトの作り方」でも、外部からのパラメータでWebサーバ内のファイル名を直接指定する実装は注意が必要とされています。詳しくはIPAのパス名パラメータの未チェック/ディレクトリ・トラバーサルで整理されています。
基本的な流れは次のとおりです。
- Webアプリケーションがファイル名を入力値として受け取る
- 攻撃者が
../などを含むパスを指定する - アプリケーションがその入力をそのまま使う
- 本来公開していないファイルが閲覧・取得される
被害としては、次のようなものがあります。
- 設定ファイルの漏えい
- 個人情報や機密情報の漏えい
- ソースコードの閲覧
- ファイルの改ざんや削除
対策としては、単に「入力文字をチェックする」だけでなく、そもそも外部入力でファイルパスを直接指定させない設計が重要です。
代表的な対策は次のとおりです。
- 利用者にファイルパスを直接入力させない
- ファイル名をIDなどに置き換えて管理する
- アクセスできるディレクトリを固定する
../などの危険な文字列を検出する- Webサーバやファイルのアクセス権限を適切に設定する
SG試験では、細かい実装方法よりも、入力されたファイル名をそのまま信頼しないという考え方が重要です。
どんな場面で使う?
ディレクトリトラバーサル攻撃は、次のようなWebアプリケーションで問題になりやすいです。
- ファイルをダウンロードする機能
- 画像やPDFを表示する機能
- ログファイルや帳票を参照する機能
- ユーザー指定のファイル名をもとに処理する機能
たとえば、マニュアル、請求書、画像、CSVファイルなどをURLパラメータで指定する画面では注意が必要です。
選択肢では、次のように書かれていたらディレクトリトラバーサル攻撃を疑います。
- 相対パス指定を悪用する
../を使って親ディレクトリを参照する- 想定外のファイルを閲覧する
- サーバ内の設定ファイルを取得する
- ファイル名パラメータを不正に指定する
一方で、次のような説明なら別の攻撃です。
| 説明 | 該当する攻撃 |
|---|---|
| SQL文を不正に実行させる | SQLインジェクション |
| ブラウザ上で悪意あるスクリプトを実行させる | XSS |
| セッションIDを盗んでなりすます | セッションハイジャック |
| OSコマンドを不正に実行させる | OSコマンドインジェクション |
| ファイルパスをたどって想定外のファイルを読む | ディレクトリトラバーサル攻撃 |
SG試験では、何を不正に操作しているかで切り分けると迷いにくくなります。
よくある誤解・混同
SQLインジェクションとの混同
SQLインジェクションは、データベースに対して不正なSQL文を実行させる攻撃です。
一方、ディレクトリトラバーサル攻撃は、サーバ内のファイルを不正に参照しようとする攻撃です。
- SQL文、データベース、SELECT、WHERE → SQLインジェクション
- ファイル名、パス、
../、設定ファイル → ディレクトリトラバーサル攻撃
この切り分けが一番大切です。
XSSとの混同
XSSは、利用者のブラウザで悪意あるスクリプトを実行させる攻撃です。
ディレクトリトラバーサル攻撃は、ブラウザでスクリプトを動かすことが目的ではありません。
目的は、サーバ内の想定外のファイルを閲覧・取得することです。
OSコマンドインジェクションとの混同
OSコマンドインジェクションは、サーバ上でOSコマンドを実行させる攻撃です。
ディレクトリトラバーサル攻撃は、主にファイルパスの指定を悪用します。
選択肢に「コマンドを実行」とあればOSコマンドインジェクション、「ファイルを参照」とあればディレクトリトラバーサル攻撃を疑います。
入力チェックだけで十分という誤解
入力チェックは重要ですが、それだけで安全とは限りません。
より安全なのは、利用者にファイルパスを直接指定させず、アプリケーション側で許可されたファイルだけを選べるようにする設計です。
SG試験では、対策として「外部入力をそのままファイルパスに使わない」「アクセス権限を適切に設定する」といった選択肢が正解になりやすいです。
まとめ(試験直前用)
- ディレクトリトラバーサル攻撃は、ファイル名やパス指定を悪用する攻撃
../や親ディレクトリ指定が出たら、まず疑う- 狙いは、データベースではなくサーバ内のファイル
- SQL文ならSQLインジェクション、スクリプト実行ならXSSと切り分ける
- 対策は、外部入力でファイルパスを直接指定させないことが基本
SG試験では、
「何を不正に操作しているか」
を見ると判断しやすくなります。
ファイルパスをたどる攻撃なら、ディレクトリトラバーサル攻撃です。