1.

ファイル拡張子とは|起源・MIME・マジックナンバー・偽装対策まで完全ガイド

▶
この記事の要点
  • ファイル拡張子 はファイル名末尾のドット以降の文字列(例: .pdf .json)で、ファイルの形式を OS とアプリケーションに伝える
  • 起源は CP/M / MS-DOS の 8.3 形式(ファイル名 8 文字 + 拡張子 3 文字)。現在は長さ制限なし
  • 拡張子はあくまでヒントであり、実体はファイル先頭のマジックナンバー(バイト列)が決める。例: PDF は %PDF、PNG は 0x89 50 4E 47
  • Web では拡張子の代わりに MIME タイプ(Content-Type)で形式を伝える(例: application/json)
  • 拡張子の偽装は古典的なマルウェア手口(.pdf.exe など)。Windows では既定で拡張子が非表示なので要注意

ファイル拡張子とは

ファイル拡張子(file extension)は、ファイル名末尾のドット . 以降に付く短い文字列のことです。report.pdf なら .pdf、config.json なら .json が拡張子にあたります。役割は「このファイルはこの形式で書かれている」と OS・アプリケーションに伝えること。それだけです。

たとえばユーザーが photo.jpg をダブルクリックすると、OS は拡張子 .jpg を見て「JPEG 画像を扱うアプリ(既定の画像ビューア)」を起動します。script.py なら Python インタプリタが、archive.zip なら解凍ソフトが——という具合に、拡張子は関連付け(file association)のキーになります。

起源 ── 8.3 形式

拡張子という概念は、1970 年代の CP/M と、それを引き継いだ MS-DOS の「8.3 ファイル名」から来ています。ファイル名 8 文字 + 拡張子 3 文字、合計 11 文字(区切りのドットを含めて 12 文字)が当時の制限でした。

例意味
COMMAND.COMDOS のコマンド インタプリタ実行ファイル
AUTOEXEC.BAT起動時に実行されるバッチファイル
CONFIG.SYSDOS のシステム設定ファイル
README.TXTプレーンテキストの説明書

Windows 95 で長いファイル名(LFN)がサポートされ、拡張子も 3 文字制限から解放されました(.html .json .docx など)。Unix 系では元々こうした制限が無く、拡張子は単なる慣習として運用されています。

拡張子は単なる「印」 ── マジックナンバー

拡張子は OS とユーザーに対するヒントに過ぎず、ファイル名を photo.jpg から photo.png に変えただけでは中身は変わりません。実体を決めるのはファイル先頭の数バイトに書かれた識別子で、これをマジックナンバー(magic number / file signature)と呼びます。

形式マジックナンバー(16進)ASCII で見ると
PNG89 50 4E 47 0D 0A 1A 0A‰PNG\r\n␚\n
JPEGFF D8 FF—
GIF47 49 46 38GIF8
PDF25 50 44 46%PDF
ZIP50 4B 03 04PK..
ELF (Linux 実行)7F 45 4C 46.ELF
Mach-O (macOS)FE ED FA CE / CF—
PE (Windows 実行)4D 5AMZ

Linux/macOS の file コマンドはこのマジックナンバーを読み取って実体を判定するので、拡張子を偽っても見破れます。

$ file mystery.dat
mystery.dat: PDF document, version 1.7

$ file installer.exe
installer.exe: PE32+ executable (GUI) x86-64, for MS Windows

MIME タイプ ── Web 上の拡張子

Web では拡張子の代わりに MIME タイプ(Multipurpose Internet Mail Extensions、Content-Type)が使われます。Content-Type HTTP ヘッダで「このレスポンスは application/json です」と宣言するため、URL に拡張子がなくても正しく扱えます。

形式拡張子MIME タイプ
HTML.htmltext/html
JSON.jsonapplication/json
XML.xmlapplication/xml
PDF.pdfapplication/pdf
PNG.pngimage/png
JPEG.jpg / .jpegimage/jpeg
ZIP.zipapplication/zip
プレーンテキスト.txttext/plain; charset=UTF-8

MIME タイプの一覧は コンテントタイプ(Content-Type)一覧 を参照してください。

拡張子の偽装とセキュリティ

拡張子は文字列でしかないので、悪意ある攻撃者は 「実行ファイルを文書に見せかける」ことができます。古典的な手口は次の 2 つです。

1. 二重拡張子

invoice.pdf.exe のように拡張子を二重に付け、Windows の既定設定(「登録されている拡張子は表示しない」が ON)下で invoice.pdf としか表示されない状態を作ります。アイコンも PDF っぽいものを埋め込めるので、ユーザーは PDF と信じてダブルクリック → 実体は実行ファイルでマルウェアが起動。

対策: エクスプローラーの「表示」→「ファイル名拡張子」を必ず ON にする。配布ファイルは file コマンドや Get-FileHash でハッシュを照合する。

2. RTLO(Right-to-Left Override)

Unicode 制御文字 U+202E(右から左への上書き)を埋め込み、invoicefdp.exe を invoiceexe.pdf に見せかける手口。アンチウイルスやメールゲートウェイは検出しますが、手元で URL バーから直接ダウンロードする場合は警戒が必要です。

OS ごとの扱いの違い

OS拡張子の役割実体判定
Windows拡張子で関連付け(レジストリ HKCR)基本は拡張子ベース。MotW(Mark of the Web)でブロックも
macOS拡張子 + Launch Services + UTI(Uniform Type Identifier)拡張子と中身の両方を参照
Linux拡張子は慣習のみ。実行可否はchmod +x とシバンfile コマンドでマジックナンバー判定

関連リンク

Post Share
子ページ

子ページはありません

同階層のページ
  1. ファイル拡張子とは
  2. テキスト・ドキュメント形式
  3. 画像形式
  4. 音声・動画形式
  5. アーカイブ・圧縮形式
  6. 実行ファイル・パッケージ
  7. プログラミング・スクリプト
  8. Web・データ・設定
  9. データベース・データ交換
  10. フォント
  11. システム・仮想化