ファイル名安全性

特別なファイル名

[16] ファイル名には特別扱いされるものがあります。 ファイルシステムプラットフォームの仕組み上の特殊な名前もあれば、 特定のアプリケーションに限定されるものや、 仕組み的な特殊性はないものの慣習が存在するものなどいろいろあります。

Unix の特別なファイル名

[1] Unix では . から始まるファイル名隠しファイルを表す慣習となっています。

[12] ここから派生して、ホームディレクトリー下に . から始まりアプリケーション名等が続くディレクトリーファイルで設定ファイル、 一時ファイル等を配置する慣習があります。

[2] Unix ではディレクトリーに特別なディレクトリー ... が自動作成されます。

[3] 標準入出力を表すために - が使われることがあります。 - (Unix)

[4] シェルの多くは ~ を自身のホームディレクトリーに、 ~ + ユーザー名を当該ユーザーホームディレクトリーに展開します。 ~

[5] エディターバックアップを自動作成する場合、 元のファイル名の末尾に ~ をつける慣習があります。

[13] 一般的なファイルは小文字の名前を与え、 README, LICENSE, Makefile 等目につかせたいファイルに大文字の名前を与える慣習があります。 ls 等で整列して表示されたときにまとまって表れてわかりやすいためと説明されています。 ファイル配置

[25] Unixプログラムの多くは - から始まる引数オプションの指定と解釈します。 -- (Unix) も参照。

[26] Unix では NULL (0x00) をファイル名に含められません。

[28] Unix では /ファイル名に含められません。

[27] Unix ではファイル名バイト列として扱われます。 プログラム次第、ロケール次第で UTF-8 などの文字コードと解釈されます。 結果として特定のプログラム (や特定のロケール指定) で扱えない文字コードを含むファイル名が存在してしまうことがあります。

[29] シェル空白コマンドライン引数の区切り、 \escape と解釈します。 $, ", ' その他も解釈されることがあります。

Windows の特別なファイル名

[20] ショートカット (.lnk.url.pif.scf など) はエクスプローラー拡張子表示モードにしても、 拡張子が隠されて表示されます。

[21] SCF ファイルエクスプローラーフォルダー表示時に処理されます。

[18] desktop.iniエクスプローラーの機能の指定に使われます。 Windowsエクスプローラーにとって意味のあるフォルダーに自動的に作られますし、 関係する個別設定を変更したフォルダーにも作られます。

[23] Thumbs.dbエクスプローラー縮小表示キャッシュデータです。 縮小表示したフォルダーに自動的に作成されます。

[8] .files

[24] $mftNTFS で特別な意味を持ちます。

[9] \\.\, \\?\

[19] ({, } で囲んだ) CLSID拡張子とするフォルダーエクスプローラーで特別に表示されます。

[15] Windowsの「God Mode」を悪用して実行ファイルを隠蔽するマルウェア、名前に予約語を使って削除も回避 | スラド セキュリティ, https://security.srad.jp/story/16/05/03/0737226/

[43] ファイルでもフォルダーでも、 ASCII文字記号拡張子に使わないのが無難です。

[36] ドライブ直下の autorun.inf媒体の挿入時に自動的に実行する操作を記述するファイルです。

[14] CON CON問題

[22] 8-1. Windowsパス名の落とし穴 () https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b08_01.html

[30] ~ と整数は自動的に割り当てられる短いファイル名で使われます。

[37] % は元々MS-DOS環境変数の前後区切子でしたが、 Windowsファイルパスを指定する一部の文脈で特別なフォルダーを参照するための構文に使われています。 しかしながら%は普通のファイル名に使える文字でもあります。

[39] :ドライブ名代替データストリーム名の区切りに使われますので、 ファイル名自体には使えません。

[38] Windows ではファイル名が1文字のとき、ドライブ名と曖昧になることがあります。 絶対パスにするか、 .\ を前につけて回避できます。

[7] Unix 同様に ...ディレクトリー名として使えます。 Windows 95 以降、アプリケーションによっては ... など . を更に加えて上位階層を表すことができます。

[31] Windowsエクスプローラー. から始まるファイル名に変更することを受け付けません。 Windows として禁止しているわけではないので、他の方法で作ることはできますし、 エクスプローラーファイル名変更以外は通常のファイル名のように扱えます。

[42] Unix ではしばしば使われるので、 Unix とのやり取りがある場合や Unix から移植された系のソフトウェアでたまに問題となります。

[41] .空白で終わるファイル名ファイルシステムによっては使えません。 >>40

アプリケーション依存の特別なファイル名

[6] RCS は元のファイル名,v をつけたファイル名バージョン管理に使います。

[44] CVS: CVS/, Subversion: .svn/, Mercurial: .hg/, Bazaar: .bzr/, Fossil: .fslckout/, _FOSSIL_, Plastic SCM: .plastic/

[10] ZIPファイル内: META-INF/

[11] HTTP(S) URL: 特別なHTTP(S) URL, /.well-known/

[17] アプリケーションライブラリーパッケージ: ファイル配置

ファイル名安全性

[32] ファイル名として特別な意味を持たないような文字列(片)のことをファイル名安全であるということがあります。

[34] 本記事各項からわかるように、ファイル名安全といえる条件はプラットフォームによっても、 応用によっても異なります。

[35] URL安全とも微妙に要件が異なります。

[33] 関連: 識別子文字, URL安全

関連

拡張子

file:, 識別子文字

メモ