PHPでファイルアップロード時にディレクトリトラバーサル攻撃の対策をする方法
あるシステムのセキュリティ対策としてディレクトリトラバーサル(Directory Traversal)攻撃対策をしてほしいと要望を受けた。ディレクトリトラバーサル攻撃というワード自体把握していなかったのでその辺りの詳細とPHPでのファイルアップロード時の対策方法をメモ。
ディレクトリトラバーサル(Directory Traversal)とは
ファイル名を扱うようなシステムに対し「../」のような特殊な文字列を送信することで通常ではアクセスできないファイルやディレクトリの内容を取得もしくは書き換えるといった攻撃のこと。
対策方法
basename関数でファイル名のみ取り出すことで対策できる模様。
#NGパターン $filename = './upload/' . $_FILES['test_file']['name']; #OKパターン $filename = './upload/' . basename($_FILES['test_file']['name']);
所感
普段ファイルアップロードする際は「ランダム英数+タイムスタンプ」といったファイル名にリネームしているので特に影響はなさそうだけど、そのままのファイル名でアップロードする必要が出てきた場合は上記の対策を取るようにしたい。
参考サイト
関連記事
-
-
PHPでランダムな値を取得したいケース諸々の対応方法
テストデータを作成する際にランダムな値を入れたかったけど、色々ケースがあったので ...
-
-
PHPにて文字のあいまい検索(文字のゆれ)を実装する方法
Googleで検索する際に、ちょっと間違えて入力してしまっても「もしかして○○? ...
-
-
PHPにて指定した期間内のランダムな日付をn件生成し、日付順にソートした上で受け取る方法
PHPにて指定した期間内のランダムな日付を指定した数だけ生成し、さらに日付順にソ ...
-
-
PHPでサイトURLからtitleとRSS用URLを取得
サイトのURLからRSS用URLとサイトタイトルを自動で取得したかった。その方法 ...
-
-
CodeIgniter3でCronを実行する方法
CodeIgniter3系で特定の処理をCronで自動実行したかった。以下に設定 ...