PHPでファイルアップロード時にディレクトリトラバーサル攻撃の対策をする方法
あるシステムのセキュリティ対策としてディレクトリトラバーサル(Directory Traversal)攻撃対策をしてほしいと要望を受けた。ディレクトリトラバーサル攻撃というワード自体把握していなかったのでその辺りの詳細とPHPでのファイルアップロード時の対策方法をメモ。
ディレクトリトラバーサル(Directory Traversal)とは
ファイル名を扱うようなシステムに対し「../」のような特殊な文字列を送信することで通常ではアクセスできないファイルやディレクトリの内容を取得もしくは書き換えるといった攻撃のこと。
対策方法
basename関数でファイル名のみ取り出すことで対策できる模様。
#NGパターン $filename = './upload/' . $_FILES['test_file']['name']; #OKパターン $filename = './upload/' . basename($_FILES['test_file']['name']);
所感
普段ファイルアップロードする際は「ランダム英数+タイムスタンプ」といったファイル名にリネームしているので特に影響はなさそうだけど、そのままのファイル名でアップロードする必要が出てきた場合は上記の対策を取るようにしたい。
参考サイト
関連記事
-
-
PHPにて「みんなの自動翻訳」のAPIで指定したテキストの言語判定する方法
迷惑メール対策等でメール本文が日本語のもののみ受信したい場合がある。ただ、本文内 ...
-
-
PHPで作成したプログラムをcron設定し自動実行する方法
cronの設定方法。サーバー側での設定とPHP側での書き方を以下にメモ。 &nb ...
-
-
PHPからDBX Platformを利用してDropbox内のファイルを削除する方法
以前にPHPからDropboxのファイル一覧のデータ(ファイル名や更新日時等)を ...
-
-
Composer無し&ファイル1枚でPHPのエラーメッセージ画面をリッチにするライブラリ「PHP Error」の利用方法
先日PHPのエラーメッセージを見やすくするwhoopsの利用方法をメモしたが導入 ...
-
-
複数(PHP / metaタグ / htaccess)の方法で301リダイレクト
サイトのディレクトリやファイル名を大幅に変えるという案件があった。それ自体は問題 ...