ファイル毎のバーミッション



このページは、個々のファイルに対して特権を設定する方法を説明する。
  • ファイル毎のパーミッションとは?
    通常、パーミッションはあるホストのページ全て (あるいはある証明書に署名されたページ全て) という単位で与えられる。スクリプトが特権を要求して、かつユーザーがそのホストあるいは証明書に対して設定を行っていなかった時、"grant/deny" (許可/拒否) ダイアログが表示され、ユーザーの決定がそのホスト/証明書と結び付いた全てのファイルに適用される。

    このモデルの欠点は、ローカルファイルシステム (file:// プロトコルでアクセスするもの全て) が一つのセキュリティ範囲として扱われ、その為にローカルファイルシステム上の一つのファイルに与えた特権が全てのページ -それは潜在的に安全でない- に適用される事だ。ファイル毎のパーミッションは個々のファイルに対して特権を与えられるようにする。

  • やり方
    ファイル毎のパーミッションは、ユーザー設定 (preference) の中に、ユーザー設定を変更するために特権を持ったスクリプト、あるいは設定ファイルを編集する他の手段によって、設定されていなければならない。例えば、ウェブアプリケーション開発者が HTML ページをユーザーのドライブの C:/Programs/Webapp/index.html にインストールして、そのページが XPConnect へのアクセスを必要とする JavaScript を含むとする。UniversalXPConnect 特権をユーザーのドライブ上の全てのファイルに与えるのは安全ではなかろう。そうする代りに、開発者は次のような数行をユーザー設定に加えるこのができるのではないだろうか:

    user_pref("capability.principal.myapp.id","file:///C|/Programs/Webapp/index.html"); user_pref("capability.principal.myapp.granted","UniversalXPConnect");

    このような数行は XPConnect アクセスを index.html だけに与え、他のファイルには与えない。上の myapp という言葉は、あらゆるあなたのアプリケーションにとって一意の識別子に置き換えられる。構文をもう少し一般的に書いてみると:

    user_pref("capability.principal.<グループ名>.id","<スペースで区切った絶対 URL のリスト。>");
    user_pref("capability.principal.<グループ名>.<granted|denied>","<特権の名前>");

    <グループ名> の所はあらゆる英数字の識別子、<特権の名前> は UniversalXPConnect やあなたのスクリプトが求めている拡張機能を表すその他のあらゆる特権の文字列が入る。特権についてもっと詳しい情報は、JavaScript セキュリティのドキュメンテーション を参照のこと。

  • 問題
    この仕組みはクロスプラットフォームではない。明らかに例の中の URL は各プラットフォーム用に変更しなければならないだろうし、ファイルが移動したら変更しなければならない。相対リンクを指定する方法の方が良いだろう。
[Component Security Main Page]