PHPでファイルアップロード時にディレクトリトラバーサル攻撃の対策をする方法
あるシステムのセキュリティ対策としてディレクトリトラバーサル(Directory Traversal)攻撃対策をしてほしいと要望を受けた。ディレクトリトラバーサル攻撃というワード自体把握していなかったのでその辺りの詳細とPHPでのファイルアップロード時の対策方法をメモ。
ディレクトリトラバーサル(Directory Traversal)とは
ファイル名を扱うようなシステムに対し「../」のような特殊な文字列を送信することで通常ではアクセスできないファイルやディレクトリの内容を取得もしくは書き換えるといった攻撃のこと。
対策方法
basename関数でファイル名のみ取り出すことで対策できる模様。
#NGパターン $filename = './upload/' . $_FILES['test_file']['name']; #OKパターン $filename = './upload/' . basename($_FILES['test_file']['name']);
所感
普段ファイルアップロードする際は「ランダム英数+タイムスタンプ」といったファイル名にリネームしているので特に影響はなさそうだけど、そのままのファイル名でアップロードする必要が出てきた場合は上記の対策を取るようにしたい。
参考サイト
関連記事
-
-
PHPで配列を値で検索、破棄
PHPの配列で特定の値が入っていれば それを破棄したいということがあった。 ・u ...
-
-
PHPMailerを使ってメールをSMTP送信する方法(Composer無し)
PHPでメールをSMTP送信したかった。また、レンタルサーバだったのでCompo ...
-
-
PHP7が2015年11月にリリースされるらしい
PHP7で変わること ——言語仕様とエンジンの改善ポイント from Yoshi ...
-
-
PHPとGoogle Authenticatorの組み合わせで2段階認証を実装する方法
2段階認証と言えばSMS送信のケースが多く、その次に通常のメール送信というケース ...
-
-
PHPで画像を上下反転させ保存する
やりたかった事は、下記の通り。 ・既にフォルダに保存されている画像を上下反転させ ...