今回は、HTMLのformタグを使って、ファイルのアップロードフォームを作る際にセキュリティ面で気をつけるべきことについてまとめる。
アップロードフォームの脆弱性
脆弱性は大きく二つ存在する。
まず一つが、ユーザーがアップロードしたファイルをサーバーの公開ディレクトリに保存する仕様を取るケース。
そしてもう一つが、アップロードするファイルの拡張子として、php、asp、aspx、jspなどのサーバー側で実行可能なスクリプト言語の拡張子が指定できるケースだ。
上記二つの脆弱性が揃ってしまうと、悪意のあるユーザーがアップロードしたファイルをスクリプトとしてサーバー上で実行できてしまう。
これにより以下のような被害が想定される。
- サーバー内のファイルの閲覧、改ざん、削除
- 外部へのメール送信
- サーバー攻撃への踏み台
- サーバー上でのマイニング
このほか、秘密情報の漏洩やシステム停止など、大きな被害を受けてしまう可能性がある。
アップロードフォームを作る際の注意点
先述の脆弱性を無くすためには、以下の2つのことを気をつければ良い。
- アップロードされたファイルは公開ディレクトリに置かず、参照する場合はアプリケーション経由でおこなう。
- ファイルの拡張子を制限する(jpg、png、gifのみに限定するなど)
ただし、ファイルの拡張子を制限するだけでは拡張子の漏れが生じてしまいやすいので、可能であれば上記両方の対策を施す方が良い。