[125] file: は、ファイルを表す URL scheme
です。
[126] かつては RFC 1738 で定義されていましたが、厳密には様々な利用者エージェントにより様々に実装されており、 実情を反映していませんでした。現在では公式に RFC 1738 も廃止され、名実共に標準不在となっています。
[127] URL scheme である「file:」の後にファイル名を指定しますが、
このファイル名は他の URL と似たものから各 OS のファイル名の表記法に従ったもの、
あるいはその混合や折衷など様々な形が知られています。
[128] ファイル名の部分はその環境におけるファイル・システム上の位置をそのまま表記することもあれば、 相対参照のようなものを使うことや、利用者エージェントが仮想的にファイルのように見せて提供するものを示す文字列であることもあります。
[91] IETF の RFC として最初に file: URL
を定義したのは RFC 1630 でした。
[95] file: は他の URL scheme とは違ってどこでも同義ではなく、
解釈するホストによって異なるという点が特殊です。しかしローカル・ファイル・システムのファイルを指す
URL は必要性があるために定義したとされています。
[92] 構文は ftp: と同じながら、 / はディレクトリーの分離子を表すものとされていました。
なぜか BNF 構文は示されていませんでした。
[93] authority については、 file: URL
は解釈によりホストによって指すものが変わり混乱の元であり、
有害な場合もあるため、異なるホストのものを指すことを明確にするために利用可能となっている、
と説明されていました。また、他のホストのファイルにアクセスする手段があればそれを使ってもよいとされていました。
[94] 特別な authority である localhost は、 authority
が空であるのと同義であり、どのホストであってもそのホストを表すとされていました。
[123] これはどのホストでも共通でマウントされているようなファイルや、
/etc/hosts のようにおおくのホストで共通に存在するファイルに有用とされていました。
[98] 次に file: URL を定義したのは IETF 標準化過程 RFC であった RFC 1738
でした。 IANA にも登録されました。
[99] authority は FQDN、path はその FQDN で表されるホストにおけるパスを表すとされていました >>96。
[100] 構文は次のように定義されていました >>102。
fileurl = "file://" [ host | "localhost" ] "/" fpath
[107] RFC 1738 の次の RFC 2396 は URL scheme の定義を含んでおらず、
file: URL についても個別の Internet Draft
が出版されましたが、 RFC 化には至らず現在まで放置されています。
[108] 現在では IETF 的には公式には RFC 1738 は廃止されており、
file: URL は標準不在となっています。
[109] この Internet Draft は基本的には RFC 1738 の定義を引き継いでいますが、 次のような記述が追加されています。
[104] 遠隔のファイルにアクセスするプロトコルやファイル・システムは大抵専用の
URL scheme が存在しています。例: ftp:, nfs:,
afs:, smb:
[105] Webブラウザーなどのシステムに組み込まれた特別なファイルについては専用の
URL scheme が存在することがあります。例: about:,
res:, resource:, chrome:,
chrome-extension:, shell:,
moz-icon:, rom:, device:
[57] DOS ・ Windows 系の file: URI
の形式の色々:
authority の部分authority (file:///c:/ など)localhost (file://localhost/c:/ など)authority を使用 (file://host/path/to/file など)path が実は相対参照)~ を %7E としたもの各種[59] 照会: 局所ファイルを実行させる機能がある利用者エージェントは
query の使用を認めていることがあります。
[8] 特に Windoze 上の UA において、 file: 以下のあらわしかたには様々なものがありました。
| UA | file: | file:// | file:/// | file://localhost/ | メモ | ||||||||
| C|/ | C:/ | C:\ | C|/ | C:/ | C:\ | C|/ | C:/ | C:\ | C|/ | C:/ | C:\ | ||
| M$IE2.0 | ○ | ○ | ○ | ○ | ○ | ○ | |||||||
| 11111 | |||||||||||||
[41] Windoze (WinIE) では、特殊フォルダをあらわす次のような形式 (file:///::{clsid}) が使えます。
この機能は遅くても Win2k で実装されています。
例:
フォルダによっては CLSID 表現ではなく、 shell: scheme が使用されます。
file://Folder Settings\folder.htt とか file://folder.htt とか書けるらしいです。。。
[13] 実験してみますた。 file:/// でドライブ一覧 (A|/ とかが並んでる。)
が出てきます。 Location: 欄に file:///C|/, file:///C:/,
file:///C%7C/ と入力すると望んだものが出てきますが、 file:///C:\
とすると busy で死んでしまいました。 file:// はだめでした。
[14] Lynx では HOME を表す ~ が使えます。
URL Schemes Supported in Lynx <http://lynx.isc.org/release/lynx2-8-3/lynx_help/lynx_url_support.html#file>
file:///c:/ と file:///C|/ は、得られる効果は同じですが、違うものとして扱われているようです。 (redirect みたいな関係にはないようです。) テ゛ィレクトリ /C%3A とか /%7C とか「ちゃんと」表示されます。[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
みたいな書き方を使ってるみたいです。
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>
UNIXとWindowsのファイル名 (UNCを含みます。)
は、file://を最初につけるだけでURIにしています。
(百分率符号化はします。) Windowsの場合、
\と/はどちらでもよいようです。
(名無しさん)
[69] Checking document() <http://www.dpawson.co.uk/xsl/sect4/uriIncl.html>
XSLTのdocument()関数の実装状況
(名無しさん)
[71] The xdg April 2004 Archive by thread <http://lists.freedesktop.org/archives/xdg/2004-April/thread.html#3678>
>>67 についての議論です。
file:/path 形式も理解できるようにします。authorityを明示する時は
(localhostか)
gethostbynameで得られた値を使います。という感じのようです。
(名無しさん)
[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 問題がありました。
file:///dev/zero を見ようとすると困ったことになるとか、同様の問題があったりもします。[60] 外部文書からの参照: 信頼できるか不明な相手から送られてきた文書中に
file: URI が記述されていた場合、それをどう処理するかは注意が必要です。
例えば、埋込み画像として利用者の手元のファイルが指定されていると、
利用者は外部から送られてきた文書に自分の手元の画像が含まれていると思って混乱するかもしれません。
Webブラウザでディレクトリを指定すると手元のファイルの一覧表示が行われるように実装されていることを期待して、
利用者の環境が外部から丸見えであるかのように錯覚させて安全対策と称した怪しいソフトウェアを売り込む怪しい
Web サイトも実在します。
心理的な攻撃
だけではなく、実際に攻撃することも可能です。
例えば埋込み画像として PC/AT互換機+ DOS・Windows
ではフロッピー・ディスクのドライブを表す
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
されたネットワーク上のファイル庫である可能性はざらにあります。
file:/path/to/somethingfile:///Macintosh HD/書類/test.html
旧 Mac OSのファイル。
file:/Macintosh HD/Applications/
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
file://usr/local/bin/
ディレクトリーを表すため / で終わっています >>106。
file:///c:/windows/example.ini
file:////department/example.doc
共有ディレクトリー department の example.doc を表します >>106。
[120] Windows のドライブの表現方法は色々あります >>106。
file:///c|/tmp/test.txt file:///c:/tmp/test.txt file:///c/tmp/test.txt
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 Win32 でLAN上の別計算機のファイルを開くと、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>
(名無しさん)
[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 にドライブの類を指定するのが良いとする人もいます。
[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>
//や/////じゃなくて////なのですか。。。