勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでファイルアップロード時にディレクトリトラバーサル攻撃の対策をする方法

  PHP

あるシステムのセキュリティ対策としてディレクトリトラバーサル(Directory Traversal)攻撃対策をしてほしいと要望を受けた。ディレクトリトラバーサル攻撃というワード自体把握していなかったのでその辺りの詳細とPHPでのファイルアップロード時の対策方法をメモ。

 

ディレクトリトラバーサル(Directory Traversal)とは

ファイル名を扱うようなシステムに対し「../」のような特殊な文字列を送信することで通常ではアクセスできないファイルやディレクトリの内容を取得もしくは書き換えるといった攻撃のこと。

 

対策方法

basename関数でファイル名のみ取り出すことで対策できる模様。

#NGパターン
$filename = './upload/' . $_FILES['test_file']['name'];

#OKパターン
$filename = './upload/' . basename($_FILES['test_file']['name']);

 

所感

普段ファイルアップロードする際は「ランダム英数+タイムスタンプ」といったファイル名にリネームしているので特に影響はなさそうだけど、そのままのファイル名でアップロードする必要が出てきた場合は上記の対策を取るようにしたい。

 

参考サイト

https://teratail.com/questions/78163

 - PHP

  関連記事

画像をアップロードすると複数サムネイルを生成する方法
画像をアップロードすると複数サムネイルを生成する方法

フォームで画像をアップロードすると、予め定めておいた大中小のサイズでサムネイル画 ...

PHPで日時のフォーマットをISO 8601型とDateTime型を相互に変換する方法
PHPで日時のフォーマットをISO 8601型とDateTime型を相互に変換する方法

他社のAPI等のレスポンスで日時部分が「YYYY-MM-DDTHH:II:SSZ ...

PHPで「Warning: date(): It is not safe to…」エラーの対応方法
PHPで「Warning: date(): It is not safe to…」エラーの対応方法

PHPでdate関数を使った際に「Warning: date(): It is ...

PHPでダミー画像(プレースホルダー画像)を表示する「PHP-Dummy-Image-Generator」の利用方法
PHPでダミー画像(プレースホルダー画像)を表示する「PHP-Dummy-Image-Generator」の利用方法

先日JavaScriptでダミー画像(プレースホルダー画像)を表示する「Hold ...

PHPで画像にモザイクをかけて保存
PHPで画像にモザイクをかけて保存

やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...