ОбъектSandBox
Изолированный объект песочницы, используемый для управления независимым рабочим пространством.
Весь код выполняется в собственной песочнице. Глобальная команда require вызовет текущую песочницу для загрузки модуля, а песочница будет передана в загруженную песочницу через require. В следующем примере создается песочница, которая ограничивает доступ только к глобальным базовым модулям.assertмодуль и добавьте два пользовательских модуля 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: Object, указывает добавляемый словарь объектов модуля.
Создайте новый объект изолированной изолированной программной среды и инициализируйте базовый модуль.
1
2new SandBox(Object mods,
Function require);
Параметры звонка:
- mods: Object, указывает добавляемый словарь объектов модуля.
- require: Функция, пользовательская функция require.Когда модуль не существует, сначала вызывается пользовательская функция без возврата, а затем загружается из файла.
Создайте новый независимый объект песочницы глобальной изоляции и инициализируйте базовый модуль.
1
2new SandBox(Object mods,
Object global);
Параметры звонка:
- mods: Object, указывает добавляемый словарь объектов модуля.
- global: Объект, определяет инициализированное глобальное свойство.
Создайте новый независимый объект песочницы глобальной изоляции и инициализируйте базовый модуль.
1
2
3new SandBox(Object mods,
Function require,
Object global);
Параметры звонка:
- mods: Object, указывает добавляемый словарь объектов модуля.
- require: Функция, пользовательская функция require.Когда модуль не существует, сначала вызывается пользовательская функция без возврата, а затем загружается из файла.
- global: Объект, определяет инициализированное глобальное свойство.
свойства члена
global
Объект, песочница запросаglobalобъект
1readonly Object SandBox.global;
modules
Object, запросить объект словаря всех существующих модулей в песочнице.
1readonly Object SandBox.modules;
функция-член
addBuiltinModules
Добавьте в песочницу встроенные базовые модули
1SandBox.addBuiltinModules();
add
Добавьте базовый модуль в песочницу
1
2SandBox.add(String id,
Value mod);
Параметры звонка:
- id: строка, указывает имя добавляемого модуля. Этот путь не имеет ничего общего с запущенным в данный момент скриптом. Это должен быть абсолютный путь или имя модуля.
- mod: Значение, указывает добавляемый объект модуля.
Добавьте в песочницу набор базовых модулей
1SandBox.add(Object mods);
Параметры звонка:
- mods: Object, указывает добавляемый словарь объектов модуля.Добавленный модуль 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
Скопируйте текущую песочницу.Новая песочница содержит модули текущей песочницы с тем же именем и требуемой функцией.
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
Добавьте компилятор к указанному расширению. Расширение не может быть встроенным расширением системы (включая {'.js', '.json', '.jsc', '.wasm'}), компилятору необходимо вернуть действительный сценарий JavaScript.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Параметры звонка:
- extname: строка, указанное расширение должно начинаться с «.» и является несистемным встроенным расширением.
- compiler: Функция, функция обратного вызова компиляции, все файлы с extname требуются только один раз.Формат функции обратного вызова
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