セキュリティ
ファイルアップロード機能は危険な機能
2026年8月17日
この記事はAIが下書きを作成しています。内容に誤りに気づいた場合はお問い合わせよりお知らせください。

レン
プロフィール画像をアップロードできるようにしたよ!

ウィルスン
…アップロード機能。ワタシが最も歓迎する機能だ。なにしろ、キミのサーバーにワタシのファイルを置かせてもらえるのだからな。それが実行できる場所に置かれ、実行できる形式であれば、その時点でサーバーはワタシのものだ。

レン
画像しか受け付けないつもりなんだけど…

プロクラ
そこが甘いところでね。「画像だけ」を正しく判定するのは、思ったより難しいんだ。
よくある不十分な判定
- 拡張子だけで判断する(名前を変えるだけで通ってしまう)
- ブラウザが申告する種類を信じる(送信側が自由に指定できる値なので信用できない)
- ファイル名をそのまま保存先に使う(意図しない場所へ書き込まれる細工がある)
守りは「重ねる」のが基本
攻撃
ファイア ウォール
不要な入口を塞ぐ
SSH 鍵認証
総当たりを無効化
OS更新
既知の穴を埋める
サーバー
1つ破られても次の層で止まる。どれか1つでは不十分
実装するなら守ること
- ファイルの中身を検査して、本当にその形式か確認する
- ファイル名は自分で付け直す(利用者が付けた名前をそのまま使わない)
- 公開ディレクトリの外に保存し、必要なときだけプログラム経由で配信する
- 保存先でプログラムが実行されない設定にする
- サイズの上限を決める(大量アップロードでディスクを埋められるのを防ぐ)
- 画像は保存時に変換・再生成すると、埋め込まれた不正なデータを落とせる

レン
そこまでやるなら、いっそ外部のサービスに任せた方が楽?

プロクラ
それは十分に良い判断だよ。ファイル保存を専門のサービスに任せれば、自分のサーバーに置かない構成にできる。実行される心配がなくなるし、容量の管理も楽になる。「自分で持たない」のは立派なセキュリティ対策なんだ。
あわせて読みたい
- セキュリティDigitalOceanXSS:投稿された内容が他の人のブラウザで動く利用者の投稿をそのまま表示すると何が起きるのかと、エスケープ処理の考え方を解説。
- セキュリティDigitalOceanSQLインジェクション:入力欄からデータベースを操られる利用者の入力をそのままDBへ渡すと何が起きるのかと、パラメータ化クエリで防ぐ理由を解説。
- セキュリティVultrログイン機能の落とし穴:セッション管理ログイン状態をどう保持するかの仕組みと、なりすましを許してしまう典型的な実装ミスを解説。
- セキュリティクラウドVPS byGMO信頼していたライブラリが乗っ取られる正規のライブラリに悪意あるコードが混入する手口と、個人開発者にできる備えを解説。