0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Web開発】MIMEタイプとは?ファイルアップロードで拡張子ではなくMIMEタイプを使う理由

Posted at

はじめに

Webアプリケーションでファイルアップロード機能を実装する際、「どんなファイルを受け付けるか」を制御する必要があります。このとき、拡張子ではなくMIMEタイプで判定することが推奨されています。

本記事では、MIMEタイプとは何か、なぜ拡張子判定では不十分なのかを解説します。

MIMEタイプとは

MIME(Multipurpose Internet Mail Extensions)タイプは、ファイルの中身の形式を表す標準的な識別子です。

簡単に言うと、「このデータは何の種類か?」を厳密に表すための正式なフォーマットですね。

基本構造

MIMEタイプは次の形式で表現されます。

タイプ / サブタイプ

主なMIMEタイプの例

MIMEタイプ 意味
image/jpeg JPEG画像
image/png PNG画像
application/json JSONデータ
text/html HTMLファイル
application/pdf PDFファイル
text/csv CSVファイル
video/mp4 MP4動画

拡張子判定の危険性

ファイルの種類を判定する方法として、拡張子とMIMEタイプの2つがありますが、それぞれに違いがあります。

拡張子による判定の問題点

拡張子はユーザーが自由に変更できるため、セキュリティリスクがあります。

具体例を見てみましょう。

ケース1: ウイルスファイルの偽装

元のファイル: virus.exe(実行ファイル)
↓
名前を変更: virus.jpg
↓
拡張子判定: .jpg → OK
↓
結果: 危険なファイルがアップロードされる

拡張子だけで判定すると、中身が実行ファイルでも .jpg という拡張子があれば通過してしまいます。

MIMEタイプによる判定のメリット

一方、MIMEタイプはファイルの実際の中身を見て判定します。

同じケースでMIMEタイプ判定

ファイル: virus.jpg(拡張子は偽装)
↓
MIMEタイプ判定: application/octet-stream(実行ファイル)
↓
許可リスト: image/jpeg, image/png のみ
↓
結果: アップロード拒否

このように、MIMEタイプで判定することで、偽装されたファイルを検出できます。

判定方法の比較

判定方法 信頼性 セキュリティ
拡張子判定 低い 偽装可能
MIMEタイプ判定 高い 中身を判定可能

MIMEタイプによる制御の実務的な理由

実際の開発現場では、次の3つの理由からMIMEタイプによる制御が重要とされています。

1. セキュリティ対策

アップロードを許可するファイル種類を制限することで、以下のようなファイルをブロックできます。

  • 実行ファイル(.exe、.bat など)
  • スクリプトファイル(.js、.php など)
  • マルウェア

2. システムの安定性

想定外のファイル形式を受け入れると、システムに負荷がかかる可能性があります。

MIMEタイプで制御することで、次のような問題を防げます。

  • メモリの過剰使用
  • ストレージの圧迫
  • 処理時間の増大

3. API仕様の遵守

APIの設計仕様を守るために、受け入れるファイル形式を明確にする必要があります。

例: 画像アップロードAPI

許可するMIMEタイプ: image/jpeg, image/png
↓
これにより以下を防ぐ
- PDFファイルのアップロード
- Excelファイルのアップロード
- 動画ファイルのアップロード

仕様違反のリクエストを早期に検出し、適切なエラーメッセージを返すことができます。

よく使うMIMEタイプ一覧

開発でよく扱うMIMEタイプをまとめました。

画像ファイル

拡張子 MIMEタイプ
.jpg / .jpeg image/jpeg
.png image/png
.gif image/gif
.webp image/webp
.svg image/svg+xml

ドキュメントファイル

拡張子 MIMEタイプ
.pdf application/pdf
.csv text/csv
.txt text/plain
.json application/json
.xml application/xml

メディアファイル

拡張子 MIMEタイプ
.mp4 video/mp4
.mp3 audio/mpeg
.wav audio/wav

圧縮ファイル

拡張子 MIMEタイプ
.zip application/zip
.tar application/x-tar
.gz application/gzip

まとめ

MIMEタイプは、ファイルの中身の形式を表す標準的な識別子です。

ファイルアップロード機能を実装する際は、次の理由からMIMEタイプによる判定が推奨されます。

  • 拡張子は偽装可能だが、MIMEタイプは中身で判定できる
  • セキュリティリスクを低減できる
  • システムの安定性を保てる
  • API仕様を明確に守れる

実務では、拡張子ではなくMIMEタイプで制御することが、より安全で堅牢なシステムを作る基本となります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?