セキュリティ
ファイルアップロード機能は危険な機能
2026年8月17日

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

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

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

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

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

プロクラ
それは十分に良い判断だよ。ファイル保存を専門のサービスに任せれば、自分のサーバーに置かない構成にできる。実行される心配がなくなるし、容量の管理も楽になる。「自分で持たない」のは立派なセキュリティ対策なんだ。
画像でも安心できない理由

プロクラ
中身を検査して本当に画像だと確認しても、まだ終わりではないんだ。画像として正しいまま、別の意味を持たせられる場合がある。
- 画像ファイルの中に、別の内容を紛れ込ませることができる
- 表示するときの扱い方によっては、それが実行されうる
- だから「置き場所で実行させない」ことが、判定と同じくらい重要になる
- 画像を作り直して保存すれば、余計な情報も落とせる
容量と枚数の制限

プロクラ
見落とされやすいのが、大きさと回数の制限だよ。上限が無いと、大きなファイルを繰り返し送られただけでディスクが埋まる。攻撃というより、事故のような形で止まるんだ。
- 1ファイルの大きさに上限を設ける
- 1人あたりの回数と合計容量に上限を設ける
- 処理中の一時ファイルを必ず消す
- ディスクの使用率を監視する

レン
判定するだけじゃなくて、置き場所と上限まで含めて設計するんだね。
受け取ったあとの扱い
- 保存先を公開ディレクトリの外にして、必要なときだけ配信する
- 配信するときは、実行ではなくダウンロードとして扱う
- 利用者が付けたファイル名をそのまま表示しない(表示時の無害化も必要)
- 不要になったファイルを消す仕組みを用意する
あわせて読みたい
- セキュリティSQLインジェクション:入力欄からデータベースを操られる利用者の入力をそのままデータベースへ渡すと何が起きるのか、パラメータ化クエリが効く理由、効かない場面、そして万一に備えて被害を小さくする設定を解説します。
- セキュリティXSS:投稿された内容が他の人のブラウザで動く被害を受けるのがサーバーではなく訪問者である理由、表示するときに無害化するという原則、投稿でHTMLを許可したい場合の扱い、そして盗まれるものを減らす備えを解説します。
- セキュリティ使わなくなったVPSを放置するとどうなるか止めたつもりでも課金は続き、更新されないサーバーは他人に使われます。放置で起きることと、閉じるときにやるべきことを順に解説します。
- セキュリティ事業者から「攻撃の踏み台になっている」と連絡が来たら自分のサーバーが加害側になったときの初動。優先すべき順番と、通信を止めることが最優先である理由、そして復旧までの進め方を解説します。