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 なら .pdfconfig.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.exeinvoiceexe.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. システム・仮想化

最近更新/作成されたページ