オブジェクトサンドボックス
独立した実行スペースを管理するために使用される、分離されたサンドボックス オブジェクト
すべてのコードは独自のサンドボックスで実行され、グローバル require は現在のサンドボックスを呼び出してモジュールをロードし、サンドボックスは require を通じてロードされたサンドボックスに渡されます。次の例では、グローバル 基本モジュールへのアクセスのみを制限するサンドボックスを作成します。assertモジュールを追加し、2 つのカスタム モジュール a と b を追加します。
1
2
3
4
5
6
7
8var vm = require('vm');
var sbox = new vm.SandBox({
a: 100,
b: 200,
assert: require('assert')
});
var mod_in_sbox = sbox.require('./path/to/mod');
SandBox は攻撃を防ぐセキュリティ サンドボックスではないことに注意してください。SandBox は、異なるコードを分離し、相互干渉を回避するために使用できる独立した実行スペースにすぎませんが、悪意のあるコードを防ぐことはできません。
相続関係
コンストラクタ
SandBox
新しい分離サンドボックス オブジェクトを構築し、基本モジュールを初期化します。
1new SandBox(Object mods = {});
呼び出しパラメータ:
- mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
新しい分離サンドボックス オブジェクトを構築し、基本モジュールを初期化します。
1
2new SandBox(Object mods,
Function require);
呼び出しパラメータ:
- mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
- require: 関数、カスタム require 関数。モジュールが存在しない場合は、リターンせずにカスタム関数が最初に呼び出され、次にファイルからロードされます。
新しい独立したグローバル分離サンドボックス オブジェクトを構築し、基本モジュールを初期化します。
1
2new SandBox(Object mods,
Object global);
呼び出しパラメータ:
- mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
- global: オブジェクト。初期化されたグローバル プロパティを指定します。
新しい独立したグローバル分離サンドボックス オブジェクトを構築し、基本モジュールを初期化します。
1
2
3new SandBox(Object mods,
Function require,
Object global);
呼び出しパラメータ:
- mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します
- require: 関数、カスタム require 関数。モジュールが存在しない場合は、リターンせずにカスタム関数が最初に呼び出され、次にファイルからロードされます。
- global: オブジェクト。初期化されたグローバル プロパティを指定します。
メンバーのプロパティ
global
オブジェクト、クエリサンドボックスglobal物体
1readonly Object SandBox.global;
modules
オブジェクト、サンドボックス内のすべての既存モジュールの辞書オブジェクトをクエリします。
1readonly Object SandBox.modules;
メンバー関数
addBuiltinModules
組み込みの基本モジュールをサンドボックスに追加する
1SandBox.addBuiltinModules();
add
基本モジュールをサンドボックスに追加する
1
2SandBox.add(String id,
Value mod);
呼び出しパラメータ:
- id: 文字列。追加するモジュールの名前を指定します。このパスは、現在実行中のスクリプトとは関係がありません。絶対パスまたはモジュール名である必要があります。
- mod: 値、追加するモジュール オブジェクトを指定します
基本モジュールのセットをサンドボックスに追加する
1SandBox.add(Object mods);
呼び出しパラメータ:
- mods: オブジェクト、追加するモジュール オブジェクト ディクショナリを指定します。追加された JavaScript モジュールは、サンドボックス変更オブジェクト間の相互干渉を避けるためにコピーを生成します。
addScript
スクリプトモジュールをサンドボックスに追加する
1
2Value SandBox.addScript(String srcname,
Buffer script);
呼び出しパラメータ:
- srcname: 文字列。追加するスクリプトの名前を指定します。srcname には、次のような拡張子が含まれている必要があります。jsonまたはjs、jsc
- script:Buffer、追加するバイナリコードを指定します
返される結果:
- Value、ロードされたモジュールオブジェクトを返します。
remove
指定された基本モジュールをサンドボックスから削除します
1SandBox.remove(String id);
呼び出しパラメータ:
- id: 文字列。削除するモジュールの名前を指定します。このパスは、現在実行中のスクリプトとは関係がありません。絶対パスまたはモジュール名である必要があります。
has
サンドボックスから基本モジュールが存在するかどうかを検出する
1Boolean SandBox.has(String id);
呼び出しパラメータ:
- id: 文字列。検出するモジュールの名前を指定します。このパスは、現在実行中のスクリプトとは関係がありません。絶対パスまたはモジュール名である必要があります。
返される結果:
- Boolean、存在しますか?
clone
現在のサンドボックスをコピーします。新しいサンドボックスには、同じ名前と require 機能を持つ現在のサンドボックスのモジュールが含まれています。
1SandBox SandBox.clone();
返される結果:
- SandBox、新しいサンドボックスをコピーしました
freeze
現在のサンドボックスと凍結されたサンドボックスを凍結します。global加えられた変更は無視されます
1SandBox.freeze();
run
スクリプトを実行する
1SandBox.run(String fname);
呼び出しパラメータ:
- fname: 文字列。実行するスクリプトのパスを指定します。このパスは現在実行中のスクリプトとは関係がないため、絶対パスである必要があります。
resolve
モジュールをクエリして、モジュールの完全なファイル名を返します。
1
2String SandBox.resolve(String id,
String base);
呼び出しパラメータ:
- id: 文字列、ロードするモジュールの名前を指定します
- base: 文字列、検索パスを指定します
返される結果:
- String、ロードされたモジュールの完全なファイル名を返します。
require
モジュールをロードし、モジュールオブジェクトを返します。
1
2Value SandBox.require(String id,
String base);
呼び出しパラメータ:
- id: 文字列、ロードするモジュールの名前を指定します
- base: 文字列、検索パスを指定します
返される結果:
- Value、ロードされたモジュールオブジェクトを返します。
setModuleCompiler
指定された extname にコンパイラを追加します。extname はシステムの組み込み拡張子 ({'.js'、' を含む) にすることはできません。json', '.jsc', '.wasm'})、コンパイラーは有効な JavaScript スクリプトを返す必要があります。
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
呼び出しパラメータ:
- extname: 文字列。指定された拡張名は「.」で始まる必要があり、システムに組み込まれていない拡張子です。
- compiler: 関数、コンパイル コールバック関数、extname を持つすべてのファイルは 1 回だけ必要です。コールバック関数の形式は
compiler(buf, requireInfo)
、buf は読み取りファイルですBuffer、requireInfo 構造体は です{filename: string}
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var vm = require('vm');
var sbox = new vm.SandBox({});
// compile ts to js and load
sbox.setModuleCompiler('.ts', tsCompiler);
var mod_ts = sbox.require('./a.ts');
// compile coffee to js and load
sbox.setModuleCompiler('.coffee', cafeCompiler);
var mod_coffee = sbox.require('./a.coffee');
// compile jsx to js and load
sbox.setModuleCompiler('.jsx', reactCompiler);
var mod_react = sbox.require('./a.jsx');
// compile yaml to rest and load
sbox.setModuleCompiler('.yml', yaml2Rest)
sbox.setModuleCompiler('.yaml', yaml2Rest)
// compile markdown to html and load
sbox.setModuleCompiler('.md', mdCompiler)
sbox.setModuleCompiler('.markdown', mdCompiler)
toString
オブジェクトの文字列表現を返します。通常、「[Native Object]」が返されます。オブジェクトは、独自の特性に従って再実装できます。
1String SandBox.toString();
返される結果:
- String、オブジェクトの文字列表現を返します。
toJSON
オブジェクトの JSON 形式表現を返します。通常は、オブジェクトによって定義された読み取り可能なプロパティのコレクションを返します。
1Value SandBox.toJSON(String key = "");
呼び出しパラメータ:
- key: 文字列、使用されません
返される結果:
- Value、シリアル化可能な JSON を含む値を返します