神奈川大学 経済学部 経済情報処理

Tips: ファイルの拡張子

ファイル拡張子ってなに?

ファイル拡張子(かくちょうし、extentionの訳語)とは、Windowsの昔々の先祖にあたるMS-DOSと呼ばれるオペレーティングシステムに存在したシカケで、ファイル名の一部をファイルの分類用に使うというものでした。具体的には、MS-DOSの時代にはファイルにつけられる名前は最長8バイトの名前+.(ドット)+最長3バイトの拡張子という構造に限定されていたのです。このような名前の付け方を「8.3形式」と呼んだりもします。例を挙げるとこんな感じです

HELLO.TXT
SCORE.WJ2
ひみつ.TBL

MS-DOS時代の人は、このようなファイル名を見ると、「あぁ、HELLO.TXTは拡張子が TXTだからテキストファイルだな」「SCORE.WJ2は拡張子が WJ2だからロータス1-2-3のファイルだな」と分かったわけです。そして、それぞれのファイル形式に応じたプログラムを人間が選んで(たとえば、TXTだったらMIFESを使うとか、WJ2だったらロータス1-2-3を使うとか)起動し、必要な処理を行っていました。

この関係が変わってきたのが、Windows3.1という(これまたかなり昔の)オペレーティングシステムからです。Windows3.1では現在皆さんが使っているようなアイコンやマウスを使ったユーザーインターフェースを使えるようになりました。また、現在では一般的になっているデータファイルをダブルクリックすると適切なアプリケーションが起動してファイルを開いてくれるというシカケも実装されました。

ところが、Windows3.1はファイルシステムとしてはMS-DOSをそのまま使っていました。つまり、ファイルそのものの情報としては 8.3形式の名前しか存在しない状態で、「データファイルをダブルクリックすると適切なアプリケーションが起動」という難事業をオペレーティングシステムがやってのける必要が生じたわけです。そのために、Windowsが採用した方法は「拡張子とアプリケーションの関連づけ」という強引な方法でした。早い話がMS-DOS時代には人が拡張子を人が見てアプリケーションを選んでいた操作を機械化しただけです。この強引な方法は、そのままWindowsでずっと引き継がれており、もっと洗練されたファイルシステムを使えるようになった現在でも基本的には同じ方法で Windowsは起動するアプリケーションを決めています。実際にどのような関連づけが行われているかは、コントロールパネルの「プログラム」-「既定のプログラム」-「ファイルの種類またはプロトコルのプログラムへの関連付け」を開けば確認可能です。下の図は、Xで始まる拡張子のあたりを示していますが、Excel関係に関連づけられているものが多いことが分かります。

ファイル拡張子なんて見たことないよ?

さて、このように重要なファイル拡張子ですが、最近のWindowsではユーザーにファイル拡張子を見せないことが基本設定となっています(下図参照)。ファイル名の変更を行っても、拡張子の部分は表示されないので変更したくてもできません。これは、不慣れなユーザーが間違って拡張子を変えてしまうことにより拡張子とアプリケーションの関連づけが壊れ、プログラム起動が上手くいかなくなることを避けるためだと思われます。この状態だと、人間がファイルの種類を判断する方法は、アイコンとして表示されている画像によるしかありません。下図を見ると、Excelのファイルが2つとWordのファイルが2つ、そしてテキストファイルが1つと画像ファイルが一つあるように見えます。

通常はこれで問題がないのですが、実はここに大きな問題があります。Windowsの場合、データファイルのアイコンは拡張子と関連づけられたアプリケーションのアイコンを使いますが、アプリケーションの場合はアプリケーション作成者が自由にアイコンを設定できます。そのため、悪意のアプリケーション作成者が「あたかも普通のデータファイルのように見える」アイコンをプログラムに設定することも実は可能です。実は、上の図のうち、「CoffeeBreak」というファイルはExcelとは何の関係もないアプリケーションのファイルです。当然、ダブルクリックすると起動するのはExcelではなく、別のプログラムになります。

これは、拡張子を表示しないという設定にしている限り、避けようがありません。Windowsはアイコンによってアプリケーションの起動方法を決めているわけではないからです。拡張子を表示していないということは、Windowsの動作の根拠となる情報を見たくないわけですから。

拡張子を表示する

悪意のプログラムがアイコンを偽装してくることは少なくありません。要するに「ExcelのアイコンがついてるファイルだからExcelのデータファイルだろう」というような思い込みは、物騒なファイルが流通している昨今では自殺行為ということです。これに対する一つの対策は、拡張子を表示するようにWindowsを再設定することです。具体的には、「コントロールパネル」から「デスクトップのカスタマイズ」- 「フォルダーオプション」を選び、、「表示」タブの中で「登録されている拡張子は表示しない」のチェックを外せばOKです。

このチェックを外すと、さきほどのファイル表示は以下のように変化します。見れば分かるように、ファイル名の最後にドット+3文字の拡張子が付いていますし、CoffeeBreakはExcelのデータファイルのようなフリをしているが実は拡張子が .EXEでアプリケーションであることも分かります。

拡張子を表示すれば安心か? それはまだ甘い

さて、拡張子を表示するようにWindowsを再設定したら、CoffeeBreak.exeはアプリケーションファイルであることが分かるようになりました。これでめでたしめでたし、……ではありません。それは、Windowsがファイル名を表示する欄の大きさに限界があることと、ファイル名に空白を含めることができる点が話をややこしくするからです。

たとえば、悪意のプログラマがCoffeeBreak.xls                                   .exe というファイル名をつけたとしましょう。つまり、ファイル名の最初だけみるとあたかもExcelのデータファイルのように見えるが、途中に空白がたくさん入っていて本当の拡張子(最後のピリオドの後ろ3文字)は実行ファイルを表す exeになっているというようなケースです。このようなファイル名をエクスプローラで表示すると下図のように表示されます。

よく見ると、右隣のファイルに比べて

などの差があるので、そのつもりになって見れば区別は付きますが、そのつもりになって見なければこんなものは区別できません。気づかずにダブルクリックしてしまえば、Excelではなく別のプログラムが起動してしまいます。このようなファイルの本名を見るためには、右ボタンクリックしてプロパティを見るとか、名前の変更を一時的に選んでみるなどの方法が有効です。ただし、「登録済み拡張子を表示しない」というデフォルト設定のままだと何をやっても本物の拡張子は表示されないので無駄。

ではどーすればいいのか?

何事にもトレードオフがあります。自分が拡張子というものを意識してファイル管理ができると思うなら、拡張子を表示する設定にすればいいし、できないと思うなら時々地雷を踏んで痛い目(ファイルが全部消えるとか、PC内の情報を盗まれるとか、SPAMを送るボットネットに組み込まれてしまうとか、友達のメールアドレスにウィルス詰め合わせを送りつけて友達失うとか)に遭うのも人生です。

一般的に管理者と呼ばれる人たちは自分の仕事を増やしたくないので、拡張子を表示することには消極的なケースが多いようです。これは、拡張子を理解していないユーザーは、たとえ CoffeeBreak.exe というファイル名であっても Excelのアイコンがついていればダブルクリックしちゃうのでセキュリティ的な改善に全くならない上、ファイル名を変更するときに拡張子を変えてしまうトラブルだけは増えるという事情を考えれば当然でもあります。