FileHint

MIME タイプと拡張子の違い — なぜ両方あるのか

拡張子はファイル名の慣習、MIME は配信時のコンテンツ表明。両者がずれるとブラウザやメーラーが誤認し、セキュリティ事故につながります。

違いを一言で

  • 拡張子 (.pdf): ファイル名の末尾。OS がどのアプリで開くかを決める慣習
  • MIME (application/pdf): HTTP / メールでの『このバイト列は何か』を相手に伝える宣言

なぜ両方必要か

  • 拡張子はユーザーが自由に書き換えられる。攻撃者が .jpg.exe と見せかけたり、逆もできる
  • MIME はサーバーやメールクライアントが決定し、受信側が挙動を切り替えるために使う

両者がずれるとどうなるか

  • ブラウザが PDF として開くはずが、実は EXE でダウンロードが発生
  • Content-Type: text/html で配信されてしまったアップロード画像が XSS の温床になる

サーバー側での対策

  • ファイルアップロード時は拡張子と MIME 両方を検証
  • File Signature Checker 的に先頭バイトで実体を判定してから配信
  • X-Content-Type-Options: nosniff でブラウザの MIME sniffing を無効化

関連

関連する拡張子

出典