Security check basics 和訳
MDCにはまだ日本語訳がないのですが(あったら訳さないんだからあたりまえだ)、アカウントをとって勝手に入れちゃってもいいんでしょうか。
Security check basics
このドキュメントではGeckoのセキュリティモデルの基本的概念を概略を示します。
Basic Definitions
GeckoセキュリティモデルはAがOにCできるか?
という形式の問い合わせに答えるかたちで設計されています。
この問い合わせに答えるには、動作を行う実体(Aはactorを意味しています)、実行される動作(Vはverbを意味しています)、実行される動作の対象(Oはobjectを意味しています)についての情報が必要です。
Geckoには、プロパティXを取得する、プロパティXを設定する、関数Fを呼ぶ、といった限定されたverbがあります。
actorとobjectのふたつはprincipalで表されます。
Principals
principalはセキュリティのコンテキストを表します。ウェブ上での典型的なprincipalはスキーマ+ホスト+ポートの組み合わせです。
AがOにVできるか?を問い合わせるとき、A(actionを実行する実体)をsubject principalと呼びます。O(動作を行われる対象)はobject principalと呼ばれます。
Scripted and native JavaScript functions
JavaScriptには2種類の関数があります。
-
ひとつめは、単純にCの関数のポインタを保持していて、呼び出されると
thisオブジェクトや引数などをCの関数に渡して呼び出します。ネイティブ関数の例としてArray.sortがあります。関数が呼ばれると、Cのソート関数を呼び出してsort()が呼ばれたArrayオブジェクトを渡します。 -
ふたつめは、”scripted” functionと呼ばれるものです。JavaScriptの
functionキーワードや、適切なJSAPI呼び出しで生成されます。これらの関数が呼ばれたときはJavaScriptインタプリタでJavaScriptのコードが実行されます。 - スタック上にJavaScriptがないときは、subject principalは”system”(全能のprincipal)になります。
- スタック上にJavaScriptがあるときは、スタックを上から下にscripted functionが出てくるまで辿ります。scripted functionには必ず関連づけられたprincipalが存在します(scripted functionを作るときには、誰が作ろうとしているかを伝えないといけません)。それがsubject principalになります。
セキュリティ上の二種類の関数の違いは、scripted functionはprincipalがコンパイルされて関数に埋め込まれているところです。scripted functionはその関数を定義したスクリプトが実行されたページのprincipalを保持しています。
Determining the subject principal
セキュリティチェックの実行を要求されると、セキュリティマネージャは現在のsubject principal(actorがセキュリティチェックされる動作を行おうとしている)を決定する必要があります。Gecko1.9のセキュリティマネージャはXPConnectにXPConnectが管理しているスタックから”current JSContext”を得るように要求します。このJSContextは実行中のスクリプトが使っているコールスタックへのポインタを持っています。
Determining the object principal
GeckoがあるJavaScriptオブジェクトのprincipalを決めるには、そのオブジェクトからそのオブジェクト自身のprincipalを知っているオブジェクトまで__parent__チェインを辿っていきます(たいていはWindowかDocumentです)。それが問い合わせされたオブジェクトのobject principalとして使われます。

No comments
Jump to comment form | comments rss [?] | trackback uri [?]