勉強したことのメモ

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

  関連記事

Stripe Checkoutにてクレジットカード決済の際に3Dセキュア対応にする方法
Stripe Checkoutにてクレジットカード決済の際に3Dセキュア対応にする方法

先日Stripe Checkoutを用いたクレジットカード決済機能についてメモし ...

PHPでユーザID毎にディレクトリを作成しキャッシュファイルを格納する方法
PHPでユーザID毎にディレクトリを作成しキャッシュファイルを格納する方法

PHPで作ったプログラム内にてユーザーID毎に特定のディレクトリを作成し、その中 ...

PHPのテンプレートエンジン「Twig」の使い方について簡易メモ
PHPのテンプレートエンジン「Twig」の使い方について簡易メモ

開発中の案件でテンプレートエンジンのTwigを利用する機会があった。使ってみた感 ...

PHPにて「php-ulid」ライブラリを用いてULIDを生成する方法
PHPにて「php-ulid」ライブラリを用いてULIDを生成する方法

先日MySQLにてUUIDを発行するメモを書いたがUUID v1だと生成時間によ ...

MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法

先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...