Components.utils.evalInSandbox

はじめに

制限付き特権を持つ環境下で JavaScript のコードを評価したい場合があるかもしれません。Firefox 1.5 (Gecko 1.8) 以降にはこのための API が存在します。それにはそのコンテキスト内でコードを作成し、評価できる「サンドボックス (sandbox)」という概念が含まれています。このメソッドを用いて評価されるコードは常に普通のウェブページと同様の制限付き特権を持つ環境下で評価されます。

使用法

evalInSandbox を使用するには、まず Components.utils.Sandbox というコンストラクタを用いてサンドボックスオブジェクトを作成する必要があります。サンドボックスは主要な URI で初期化しなければなりません。この URI は同一生成元 (same origin) セキュリティチェックに使用されます。例えば、http://www.example.com/ という URI を渡すと、このサンドボックスを用いて評価されるコードは http://www.example.com からのデータにアクセスできるようになります。ウェブページの JavaScript から document.domain をセットして同一生成元セキュリティチェックを変更することができるため、DOM window オブジェクトをサンドボックスのコンストラクタに渡してしまうこともできます。

// 主要な URI を渡してサンドボックスを作成
var s = Components.utils.Sandbox("http://www.example.com/");
// サンドボックスオブジェクトは実行するスクリプトに対して
// グローバルスコープを持つ
s.y = 5;
var result = Components.utils.evalInSandbox("x = y + 2; x + 3", s);
// result は 10、s.x は 7 となる

s.foo = Components;
// この場合は "Permission Denied" というエラーが生じる
Components.utils.evalInSandbox("foo.classes", s);

Document Tags and Contributors

Contributors to this page: Mgjbot, Electrolysis
最終更新者: Mgjbot,