プロクラ(クラウドAIロボット、詳しい役)SabaKore

セキュリティ

ファイルアップロード機能は危険な機能

2026年8月17日

レン(新米インフラエンジニア)・わくわく

レン

プロフィール画像をアップロードできるようにしたよ!
ウィルスン(セキュリティの番人)・攻撃中

ウィルスン

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

レン

画像しか受け付けないつもりなんだけど…
プロクラ(クラウドAIロボット、詳しい役)・困った

プロクラ

そこが甘いところでね。「画像だけ」を正しく判定するのは、思ったより難しいんだ。

よくある不十分な判定

  • 拡張子だけで判断する(名前を変えるだけで通ってしまう)
  • ブラウザが申告する種類を信じる(送信側が自由に指定できる値なので信用できない)
  • ファイル名をそのまま保存先に使う(意図しない場所へ書き込まれる細工がある)

守りは「重ねる」のが基本

攻撃

ファイアウォール

不要な入口を塞ぐ

SSH鍵認証

総当たりを無効化

OS更新

既知の穴を埋める

サーバー

1つ破られても次の層で止まる。どれか1つでは不十分

実装するなら守ること

  • ファイルの中身を検査して、本当にその形式か確認する
  • ファイル名は自分で付け直す(利用者が付けた名前をそのまま使わない)
  • 公開ディレクトリの外に保存し、必要なときだけプログラム経由で配信する
  • 保存先でプログラムが実行されない設定にする
  • サイズの上限を決める(大量アップロードでディスクを埋められるのを防ぐ)
  • 画像は保存時に変換・再生成すると、埋め込まれた不正なデータを落とせる
レン(新米インフラエンジニア)・調べ中

レン

そこまでやるなら、いっそ外部のサービスに任せた方が楽?
プロクラ(クラウドAIロボット、詳しい役)・OK

プロクラ

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

画像でも安心できない理由

プロクラ(クラウドAIロボット、詳しい役)・分析中

プロクラ

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

容量と枚数の制限

プロクラ(クラウドAIロボット、詳しい役)・困った

プロクラ

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

レン

判定するだけじゃなくて、置き場所と上限まで含めて設計するんだね。

受け取ったあとの扱い

  • 保存先を公開ディレクトリの外にして、必要なときだけ配信する
  • 配信するときは、実行ではなくダウンロードとして扱う
  • 利用者が付けたファイル名をそのまま表示しない(表示時の無害化も必要)
  • 不要になったファイルを消す仕組みを用意する

あわせて読みたい

→ コラム記事をすべて見る