file

file

[125] file: は、ファイルを表す URL scheme です。

仕様書

[126] かつては RFC 1738 で定義されていましたが、厳密には様々な利用者エージェントにより様々に実装されており、 実情を反映していませんでした。現在では公式に RFC 1738 も廃止され、名実共に標準不在となっています。

構文

[127] URL scheme である「file:」の後にファイル名を指定しますが、 このファイル名は他の URL と似たものから各 OSファイル名の表記法に従ったもの、 あるいはその混合や折衷など様々な形が知られています。

[128] ファイル名の部分はその環境におけるファイル・システム上の位置をそのまま表記することもあれば、 相対参照のようなものを使うことや、利用者エージェントが仮想的にファイルのように見せて提供するものを示す文字列であることもあります。

素片識別子

[129] 通常の URL の規則に従い素片識別子が利用可能であることが一般的ですが、 #ファイル名の一部と解されることもあります。

歴史

RFC 1630

[91] IETFRFC として最初に file: URL を定義したのは RFC 1630 でした。

[95] file: は他の URL scheme とは違ってどこでも同義ではなく、 解釈するホストによって異なるという点が特殊です。しかしローカル・ファイル・システムファイルを指す URL は必要性があるために定義したとされています。

[92] 構文は ftp: と同じながら、 /ディレクトリー分離子を表すものとされていました。 なぜか BNF 構文は示されていませんでした。

[93] authority については、 file: URL は解釈によりホストによって指すものが変わり混乱の元であり、 有害な場合もあるため、異なるホストのものを指すことを明確にするために利用可能となっている、 と説明されていました。また、他のホストファイルにアクセスする手段があればそれを使ってもよいとされていました。

[94] 特別な authority である localhost は、 authority が空であるのと同義であり、どのホストであってもそのホストを表すとされていました。

[123] これはどのホストでも共通でマウントされているようなファイルや、 /etc/hosts のようにおおくのホストで共通に存在するファイルに有用とされていました。

RFC 1738

[98] 次に file: URL を定義したのは IETF 標準化過程 RFC であった RFC 1738 でした。 IANA にも登録されました。

[99] authorityFQDNpath はその FQDN で表されるホストにおけるパスを表すとされていました >>96

[100] 構文は次のように定義されていました >>102

fileurl        = "file://" [ host | "localhost" ] "/" fpath

[103] localhost空文字列はやはりそのホストを表すとされていました >>96

draft-hoffman-file-uri (2004)

[107] RFC 1738 の次の RFC 2396URL scheme の定義を含んでおらず、 file: URL についても個別の Internet Draft が出版されましたが、 RFC 化には至らず現在まで放置されています。

[108] 現在では IETF 的には公式には RFC 1738廃止されており、 file: URL は標準不在となっています。

[109] この Internet Draft は基本的には RFC 1738 の定義を引き継いでいますが、 次のような記述が追加されています。

RFC 3986

[132] あくまで例示としてではありますが、 RFC 3986 は、 file: URL では authority の省略、空の hostlocalhost はいずれも当該利用者計算機を指すものと定義されている、 と述べています。

関連

[104] 遠隔のファイルにアクセスするプロトコルファイル・システムは大抵専用の URL scheme が存在しています。例: ftp:, nfs:, afs:, smb:

[105] Webブラウザーなどのシステムに組み込まれた特別なファイルについては専用の URL scheme が存在することがあります。例: about:, res:, resource:, chrome:, chrome-extension:, shell:, moz-icon:, rom:, device:

メモ

[57] DOSWindows 系の file: URI の形式の色々:

[58] Un|x 系の file: URI の色々:

[59] 照会: 局所ファイルを実行させる機能がある利用者エージェントquery の使用を認めていることがあります。

file: 以下のさまざまな表現形式

[8] 特に Windoze 上の UA において、 file: 以下のあらわしかたには様々なものがありました。

UAfile:file://file:///file://localhost/メモ
C|/C:/C:\C|/C:/C:\C|/C:/C:\C|/C:/C:\
M$IE2.0
11111
file://C|/*/*
file://C:\*\*
  • [54] file://C:: 対応。
  • [56] 11: 対応。
file:///*
file:///C|/*/*
  • [4] Infomosaic/2.0.0 Final Beta J4 (Windows x86): 対応。
  • [6] MosaicView/2.0009 Win32 NEC/9: 対応。
file:///C:\*\*
  • [10] MSIE 2.0: 対応。アドレスバーはすぐに >>9 に書き換えられる。
file://localhost/*
file://network-host-name/*
  • [2] WinIE では、 \\network-host-name\* の参照として使用出来る。
  • [3] Mozilla on Win32 では不可。
file:C:\*\*
  • [9] Mozilla/1.22 (compatible; MSIE 2.0; Windows 95): 対応。この形式を実装したのは、おそらく M$IE が最初でしょう。
Windoze の特殊フォルダの表現

[41] Windoze (WinIE) では、特殊フォルダをあらわす次のような形式 (file:///::{clsid}) が使えます。

この機能は遅くても Win2k で実装されています。

例:

My Document
file:///::%7B450d8fba-ad25-11d0-98a8-0800361b1103%7D
My Computer
file:///::%7B20D04FE0-3AEA-1069-A2D8-08002B30309D%7D
Network Neighborhoods
file:///::%7B208D2C60-3AEA-1069-A2D7-08002B30309D%7D

フォルダによっては CLSID 表現ではなく、 shell: scheme が使用されます。

  • [52] desktop.ini では file://Folder Settings\folder.htt とか file://folder.htt とか書けるらしいです。。。

実装

Mosaic Netscape 0.9 Beta (Win16 版 on Win95)

[13] 実験してみますた。 file:/// でドライブ一覧 (A|/ とかが並んでる。) が出てきます。 Location: 欄に file:///C|/, file:///C:/, file:///C%7C/ と入力すると望んだものが出てきますが、 file:///C:\ とすると busy で死んでしまいました。 file:// はだめでした。

  • [45] >>13 NN 2.01 でもやっぱり固まります。

memo

[14] Lynx では HOME を表す ~ が使えます。

URL Schemes Supported in Lynx <http://lynx.isc.org/release/lynx2-8-3/lynx_help/lynx_url_support.html#file>

  • [44] NN2 ですが、 file:///c:/file:///C|/ は、得られる効果は同じですが、違うものとして扱われているようです。 (redirect みたいな関係にはないようです。) テ゛ィレクトリ /C%3A とか /%7C とか「ちゃんと」表示されます。
  • [48] 相対 URI ../D|/foo/ (基底 file:///C|/) のような表現が使える実装もあるそうです。いやいや、これは URI 一般構文から見ればぜんぜん不思議でなく、むしろこうかけなければなりませんが。

[53] Un|x 版 Mozilla 1.2.1 ですが、authority は常に無視して localhost であるかのように扱ってくれます。何か変ですし、 / が3本のつもりで2本にしてしまっても間違いに気づかずに変な結果が出て萎えます。

他の版でも同様な結果だったような気がしますがたしかめていません。とりあえず手元の版ではこうなりました。 (名無しさん 2004-05-10 05:13:16 +00:00)

[42] ほとんど (すべて?) の実装では、ディレクトリフォルダの最後に / があってもなくても同義と解釈します。

[43] ハードリンク, シンボリックリンクは多分そのシステムでの普通の扱い同様追いかけてくれます (ハードリンクは本物と区別できないかもしれませんがね)。 ショートカット, エイリアス, シャドウなどについても同様の実装があるかもしれません。 (ないかもしれません。)

[46] Perl の実装である URI::file は、 authority装置名その他 (DOSドライブ名とか。) を書くのは良い考えじゃないか? と述べています。このモジュールは意図的に file:/usr/bin/perl みたいな書き方を使ってるみたいです。

  • [49] w3m では、使える場面は限られますが、変数 $LIB が使えます。例: file:///$lib/foo/bar
  • [50] また、 w3m にはやはり限られますが、 cgi-bin という仮想ディレクトリを設定で作れます。 file:///cgi-bin/foo.cgi/path/to/foo.cgi に対応させられます。

[51] そして注目すべきは、 w3m の local CGI 機能の都合上、 file: URI でも照会が使われるのです。

[55] 絶対 URI だけではなくて、相対 URI もいろいろ。 RFC 1808/RFC 2396 的にはあってはならないことですが。

たとえば Windows では / drive の根になるのか、その一つ上の階層(謎)になるのか、とか、 \ も path の区切りになるのか、とか。 c:/ みたいなのを file:///c:/ の意味にとるのもありそう。

[67] freedesktop.org - Standards/file-uri-spec <http://freedesktop.org/wiki/Standards_2ffile_2duri_2dspec>

UNIX環境におけるfile: URIファイル名の写像の仕様を作ろうとしているようですが、今のところ何もありません。 (名無しさん [sage] 2006-01-03 05:37:05 +00:00)

[68] Commons VFS - Supported File Systems <http://jakarta.apache.org/commons/vfs/filesystems.html#Local%20Files>

UNIXWindowsファイル名 (UNCを含みます。) は、file://を最初につけるだけでURIにしています。 (百分率符号化はします。) Windowsの場合、 \/はどちらでもよいようです。 (名無しさん)

[69] Checking document() <http://www.dpawson.co.uk/xsl/sect4/uriIncl.html>

XSLTdocument()関数の実装状況 (名無しさん)

[71] The xdg April 2004 Archive by thread <http://lists.freedesktop.org/archives/xdg/2004-April/thread.html#3678>

>>67 についての議論です。

という感じのようです。

(名無しさん)

[72] KDEは動的に生成された内容に対してfile:/cgi-bin/helpindexのようなURIを使っています。 (名無しさん [sage])

[73] URL Schemes Supported in Lynx <http://www.infobiogen.fr/doc/info/lynx_help_files/lynx_help/lynx_url_support.html#file> (名無しさん [sage])

[76] IEBlog : File URIs in Windows <http://blogs.msdn.com/ie/archive/2006/12/06/file-uris-in-windows.aspx> (名無しさん 2006-12-06 23:31:28 +00:00)

相互運用性

[58] ここまで見てきたように、 file: URI scheme は標準不在の状況です。どうせ局所的にしか使わないのだからどうでもいいだろうという言い訳のもとに最早収拾がつかない状況に陥っています。 相互運用性なるものは期待するだけ無駄でしょう。

安全性

[16] 8-1. Windowsパス名の落とし穴 <http://www.ipa.go.jp/security/awareness/vendor/programming/b08_01.html>

Windowsファイル名の色々な表現について。この記事は直接 file: の問題を扱ったものではありませんが、 余り気にせずに実装すると file: URI でも同じ問題を抱えることになります。

[17] >>16 の問題が広く取り上げられた例として、 CON CON 問題がありました。

[60] 外部文書からの参照: 信頼できるか不明な相手から送られてきた文書中に file: URI が記述されていた場合、それをどう処理するかは注意が必要です。 例えば、埋込み画像として利用者の手元のファイルが指定されていると、 利用者は外部から送られてきた文書に自分の手元の画像が含まれていると思って混乱するかもしれません。 Webブラウザディレクトリを指定すると手元のファイルの一覧表示が行われるように実装されていることを期待して、 利用者の環境が外部から丸見えであるかのように錯覚させて安全対策と称した怪しいソフトウェアを売り込む怪しい Web サイトも実在します。

心理的な攻撃だけではなく、実際に攻撃することも可能です。 例えば埋込み画像として PC/AT互換機+ DOSWindows ではフロッピー・ディスクのドライブを表す file:///a:/fake.jpg のような指定を行うと、 (ファイルが実在するかに関わらず) フロッピー・ディスクに探しに行くと思われるので、 突然カタカタと音が鳴り出して利用者は不安・不快に思うかもしれません。 数が多ければブラクラDoS ともなり兼ねません。

[61] URI を指定できる公開サービス: URI を指定して、その URI によって取出しできる資源に対して操作するような公開のサービスでは、 意図せずに file: URI によって内部のファイルを閲覧・ 利用されてしまうことがないように注意が必要です。 特に URI から取出しを行うためにライブラリを使っている場合、 http: URI だけを使うことを想定していても file: URI の場合の処理も実装されていることがよくあります。

[63] 外部への情報提供: 転送プロトコルスクリプトなどを介して履歴情報などを提供する場合、 個人情報保護 (と場合によってはシステムの安全) の観点から外部と考えられるところには情報を送らない (取出せない) ように配慮が必要です。

例えば、 HTTP にはリンク元の URI を記述する Referer: という頭欄がありますが、 file: URI の文書から http: URI の文書へのリンクを辿ったような場合には file: URI を Referer として送るべきではありません。 古い利用者エージェントはこの配慮を怠っていたものがありましたが、 最近の Webブラウザは注意しているようです。 文書内のリンク以外では履歴や同時に表示している別の文書へのスクリプトからのアクセスなどで注意が必要です。

[64] file: は安全とは限らない: 普通 file: URI は局所ファイルを表しますから比較的安全だと考えがちですが、 必ずしもそうとは言えません。 authority は実は何でも書けますから近くのネットワーク上のホストかもしれませんし、 知らない遠くのファイル鯖かもしれません。 たとえ localhost でも、局所ファイル・システム木に mount されたネットワーク上のファイル庫である可能性はざらにあります。

[87]

file:///Macintosh HD/書類/test.html

Mac OSのファイル。

[88]

file:/Macintosh HD/Applications/

[97]

file://vms.host.edu/disk$user/my/notes/note12345.txt

VMS における DISK$USER:[MY.NOTES]NOTE123456.TXT を表します >>96

[115] localhost空文字列は等価です >>106

file://localhost/path/to/file.txt
file:///path/to/file.txt

[116]

file://usr/local/bin/

ディレクトリーを表すため / で終わっています >>106

[117] >>106

file:///c:/windows/example.ini

[118]

file:////department/example.doc

共有ディレクトリー departmentexample.doc を表します >>106

[119] ホスト名じゃなくて共有ディレクトリーなのですか。しかも /////// じゃなくて //// なのですか。。。

[120] Windowsドライブの表現方法は色々あります >>106

file:///c|/tmp/test.txt
file:///c:/tmp/test.txt
file:///c/tmp/test.txt

[121] >>106

file:/this/is/the/path

[62] Web で公開されている 著述工具によって作成されたとおぼしき HTML文書で、 画像の参照先やリンク先が file: URI で閲覧者には何も見れないことがしばしばあります (製作者の手元では正しく表示されるので気づかないのでしょう)

著述工具は普通作成した文書を何らかの形で公開することを想定しているはずですから、 URI が file: であるなら保存時に警告するなど配慮するべきです。

また、著述工具や Web ブラウザは著者のために file: URI が機能しないモードを (マークの誤り回復を行わないなどの機能と共に) 用意すると便利かもしれません。

[65] Firefox は各システム環境の標準の文字コード百分率符号化するみたいです。 (名無しさん [sage] 2005-12-25 13:39:58 +00:00)

[66] Firefox on Win32LAN上の別計算機のファイルを開くと、file://///host/path/to/fileのような、file:///の後にUNC\/にしたようなものがURIとなるようです。

(名無しさん [sage])

[70] draft-hoffman-file-uri <https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12228&rfc_flag=0>

(名無しさん [sage])

[74] The 'file' URI Scheme Update Project. <http://offset.skew.org/wiki/URI/File_scheme> (名無しさん)

[77] Windows Mobile ヒント集 - インターネットの参照 (2007-03-15 19:30:09 +09:00 版) <http://www.microsoft.com/japan/windowsmobile/wm50/techinfo/tips/browseinternet.mspx> (名無しさん)

[78] >>77 file://\windows\default-home.htm (名無しさん)

memo

[79] Elements of an EmotionML 1.0 ( 版) <http://www.w3.org/2005/Incubator/emotion/XGR-emotionml-20081120/#s6.1>

<link role="expressedBy" uri="file:johnsParty.avi" start="10s" end="15s"/>

[80] ASR's Room NicoCache Proxy Auto Config ( 版) <http://homepage1.nifty.com/asr/tools/nicocache-pac.html>

IEの場合、「file://C:/path/to/xxx.pac」だとOKなのですが「file:///C:/path/to/xxx.pac」のように「///」で指定すると無視されるようなので気をつけてください。(ホームページの設定は「///」なのに…)

フォーム提出

[81] Web Forms 2.0 ( 版) <http://www.whatwg.org/specs/web-forms/current-work/#for-file>

[82] localhost ( 版) <http://www3.ocn.ne.jp/~miotti/ds/localhost.html>

[83] XProc: An XML Pipeline Language ( 版) <http://www.w3.org/TR/2010/REC-xproc-20100511/#binary>

[84] IRC logs: freenode / #whatwg / 20101114 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101114>

[85] Standard for exchanging file: URIs ( 版) <http://equinox-project.org/spec/file-uri-spec.txt>

[86] freedesktop.org - Specifications/file-uri-spec ( ( 版)) <http://freedesktop.org/wiki/Specifications/file-uri-spec>

[89] IEのローカルファイルをXHRでどこまで読みとらせるか - 葉っぱ日記 ( 版) <http://d.hatena.ne.jp/hasegawayosuke/20110426/p1>

[122] File URI scheme - Wikipedia, the free encyclopedia ( ( 版)) <http://en.wikipedia.org/wiki/File_URI_scheme>

[124] Bug 66194 – file:// Correct URLs w/ UNC have *5* slashes ( ( 版)) <https://bugzilla.mozilla.org/show_bug.cgi?id=66194>

[130] authorityドライブの類を指定するのが良いとする人もいます。

URI::file - search.cpan.org ( 版) <http://search.cpan.org/~gaas/URI-1.58/URI/file.pm#MAPPING_NOTES>

[131] ファイル・システムによっては名前に /... を認めていることがあり、パーセント符号化によりこれを表すことがあります。

[134] <http://code.google.com/p/chromium/issues/detail?id=47416>

[135] [whatwg] URL: file: URLs ( ( 版)) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-October/037719.html>

[136] IRC logs: freenode / #whatwg / 20121026 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20121026#l-669>

[137] WWW-Talk Jan-Mar 1993: HTML todo list ( ( 版)) <http://1997.webhistory.org/www.lists/www-talk.1993q1/0043.html>

[138] WebKit組み込んでるアプリにおいて純粋にWebKit由来のバグであれば勝手に直ったりするけどWebKitをどういう設定で使っているかに起因する仕様上の欠陥は勝手に直らない - 金利0無利息キャッシング – キャッシングできます - subtech ( ( 版)) <http://subtech.g.hatena.ne.jp/mala/20121025/1351159332>

[139] Safariのfile://におけるSame origin policyについてのアップデート - 金利0無利息キャッシング – キャッシングできます - subtech ( ( 版)) <http://subtech.g.hatena.ne.jp/mala/20121023/1351004574>

[140] classic mozilla/cmd/winfe/fegui.cpp ( ( 版)) <https://mxr.mozilla.org/classic/source/cmd/winfe/fegui.cpp#2531>

[141] Issue 257354 - chromium - file URL parsing quirks - An open-source project to help move the web forward. - Google Project Hosting ( ( 版)) <http://code.google.com/p/chromium/issues/detail?id=257354>

[142] reviving the file URI scheme ( (Matthew Kerwin 著, 版)) <http://lists.w3.org/Archives/Public/uri/2013Dec/0000.html>

[143] URI/File scheme - Offset ( ( 版)) <https://offset.skew.org/wiki/URI/File_scheme>

[144] Orbeon Forms — Forms Everywhere: More secure file uploads ( ( 版)) <http://blog.orbeon.com/2012/06/more-secure-file-uploads.html>

[145] 新・OS X ハッキング! (84) 話題の「File:///」とURLスキーム | マイナビニュース ( (Mynavi Corporation 著, 版)) <http://news.mynavi.jp/column/osxhack/084/>

[146] ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic ( ( 版)) <https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L860>

[147] draft-kerwin-file-scheme-13 - The file URI Scheme ( ( 版)) <http://tools.ietf.org/html/draft-kerwin-file-scheme-13>