第11章 高度なプログラミング / 第3回 模擬試験

PHPのパストラバーサル攻撃に関する次の記述のうち、正しいものはどれか。

パストラバーサル攻撃は、ファイルパスの指定を悪用して意図しないファイルにアクセスする攻撃である。 正解
パストラバーサル攻撃はデータベースにのみ影響する攻撃である。
パストラバーサル攻撃は、`../`のような相対パス表記とは無関係である。
パストラバーサル攻撃への対策は一切存在しない。
解説
パストラバーサル(ディレクトリトラバーサル)攻撃は、ファイルパスの指定にユーザー入力を使っている箇所を悪用し、`../`(親ディレクトリへの移動)などを含む文字列を送り込むことで、本来アクセスさせるべきでないファイル(設定ファイルやシステムファイルなど)に不正アクセスする攻撃です。 他の選択肢が誤りである理由は次の通りです。 ・パストラバーサル攻撃はファイルシステムに対する攻撃であり、データベースだけに限定されるものではありません。 ・`../`のような相対パス表記はパストラバーサル攻撃の典型的な手口そのものであり、無関係ではありません。 ・入力値の検証、`realpath()`によるパスの正規化と許可ディレクトリ配下かのチェック、`basename()`でディレクトリ部分を除去するなど、有効な対策が存在します。「対策は一切存在しない」は誤りです。 例: ``` $filename = basename($_GET['file']); // ディレクトリ部分を除去 $path = realpath(__DIR__ . '/uploads/' . $filename); if ($path === false || !str_starts_with($path, realpath(__DIR__ . '/uploads/'))) { // 不正なパスとして拒否 } ``` (参照: 独習PHP 第4版 第11章 高度なプログラミング 11.2.4節 パストラバーサル p.608〜610)