Obxecto SandBox
Obxecto sandbox de seguridade, usado para xestionar un espazo operativo independente
Todo o código execútase na súa propia caixa de probas, o requirimento global chamará á caixa de probas actual para cargar o módulo e a caixa de area pasarase á caixa de probas cargada a través de requir. O seguinte exemplo crea unha caixa de proba e restrinxe o acceso ao módulo básico globalassert Módulo e engade dous módulos personalizados, a e 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');
Herdanza
Construtor
SandBox
Constrúe un novo obxecto sandbox de seguridade e inicialice o módulo básico
1new SandBox(Object mods);
Parámetros de chamada:
- mods: Obxecto, especifique o dicionario de obxectos do módulo que se vai engadir
Constrúe un novo obxecto sandbox de seguridade e inicialice o módulo básico
1
2new SandBox(Object mods,
Function require);
Parámetros de chamada:
- mods: Obxecto, especifique o dicionario de obxectos do módulo que se vai engadir
- require: Función, función personalizada que require, cando o módulo non existe, chame primeiro á función personalizada e logo cárguese desde o ficheiro sen volver
Constrúe un novo obxecto de seguridade global independente e inicia o módulo básico
1
2new SandBox(Object mods,
Object global);
Parámetros de chamada:
- mods: Obxecto, especifique o dicionario de obxectos do módulo que se vai engadir
- global: Obxecto, especifique a propiedade global inicializada
Constrúe un novo obxecto de seguridade global independente e inicia o módulo básico
1
2
3new SandBox(Object mods,
Function require,
Object global);
Parámetros de chamada:
- mods: Obxecto, especifique o dicionario de obxectos do módulo que se vai engadir
- require: Función, función personalizada que require, cando o módulo non existe, chame primeiro á función personalizada e logo cárguese desde o ficheiro sen volver
- global: Obxecto, especifique a propiedade global inicializada
Atributos dos membros
global
Obxecto, consulta caixa de area global Obxecto
1readonly Object SandBox.global;
modules
Obxecto, consulta o obxecto de dicionario de todos os módulos existentes no sandbox
1readonly Object SandBox.modules;
Función de membro
add
Engade un módulo básico ao sandbox
1
2SandBox.add(String id,
Value mod);
Parámetros de chamada:
- id: Cadea, especifique o nome do módulo a engadir, este camiño non ten nada que ver co script en execución, debe ser un camiño absoluto ou un nome de módulo.
- mod: Valor, especifica o obxecto do módulo que se vai engadir
Engade un conxunto de módulos básicos ao sandbox
1SandBox.add(Object mods);
Parámetros de chamada:
- mods: Obxecto, especifique o dicionario de obxectos do módulo que se engadirá, o módulo javascript engadido xerará unha copia para evitar a interferencia de obxectos de modificación do sandbox
addScript
Engade un módulo de script ao sandbox
1
2Value SandBox.addScript(String srcname,
Buffer script);
Parámetros de chamada:
- srcname: Cadea, especifique o nome do script a engadir, srcname debe incluír a extensión, como json Ou js, jsc
- script: Buffer, Especifique o código binario que se vai engadir
Resultado de volta:
- Value, Devolve o obxecto do módulo cargado
remove
Elimina do módulo básico o módulo básico especificado
1SandBox.remove(String id);
Parámetros de chamada:
- id: Cadea, especifique o nome do módulo a eliminar, este camiño non ten nada que ver co script en execución, debe ser un camiño absoluto ou un nome de módulo.
has
Detectar a existencia do módulo básico no sandbox
1Boolean SandBox.has(String id);
Parámetros de chamada:
- id: Cadea, especifique o nome do módulo a detectar, este camiño non ten nada que ver co script en execución, debe ser un camiño absoluto ou un nome de módulo.
Resultado de volta:
- Boolean, existe
clone
Copia o sandbox actual, o novo sandbox contén os módulos do sandbox actual, co mesmo nome e requiren función
1SandBox SandBox.clone();
Resultado de volta:
- SandBox, Copiou nova caixa de area
freeze
Conxele a caixa de area actual, a caixa de area despois de conxelala, á dereita global As modificacións feitas ignoraranse
1SandBox.freeze();
refresh
Volve cargar o módulo no sandbox, esta operación só reinicializará o módulo, restablecerá as variables no módulo e non actualizará o código do módulo
1SandBox.refresh();
run
Executa un script
1
2SandBox.run(String fname,
Array argv = []);
Parámetros de chamada:
- fname: Cadea, especifique o camiño do script que se vai executar, este camiño non ten nada que ver co script en execución, debe ser un camiño absoluto
- argv: Array, especifique o parámetro a executar, este parámetro pódese obter usando argv no script
resolve
Consulte un módulo e devolva o nome completo do ficheiro
1
2String SandBox.resolve(String id,
String base);
Parámetros de chamada:
- id: Cadea, especifique o nome do módulo a cargar
- base: Cadea, especifica a ruta de busca
Resultado de volta:
- String, Devolve o nome completo do ficheiro do módulo cargado
require
Cargue un módulo e devolva o obxecto do módulo
1
2Value SandBox.require(String id,
String base);
Parámetros de chamada:
- id: Cadea, especifique o nome do módulo a cargar
- base: Cadea, especifica a ruta de busca
Resultado de volta:
- Value, Devolve o obxecto do módulo cargado
setModuleCompiler
Engade o compilador ao nome ext especificado, extname non pode ser a extensión integrada no sistema (incluída ('.js', '.json','. jsc ','. wasm '}), o compilador necesita devolver un script javascript válido.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Parámetros de chamada:
- extname: A cadea, o nome de extensión especificado, debe comezar con '.', E é unha extensión que non está integrada no sistema
- compiler: Función, compile a función de devolución de chamada, todos os ficheiros con extname só requirirán unha vez. O formato da función de devolución de chamada é
compiler(buf, requireInfo)
, buf é o ficheiro lidoBuffer, a estrutura 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({});
// 编译 typescript 脚本为 js 并加载
sbox.setModuleCompiler('.ts', tsCompiler);
var mod_ts = sbox.require('./a.ts');
// 编译 coffee 脚本为 js 并加载
sbox.setModuleCompiler('.coffee', cafeCompiler);
var mod_coffee = sbox.require('./a.coffee');
// 编译 jsx 脚本为 js 并加载
sbox.setModuleCompiler('.jsx', reactCompiler);
var mod_react = sbox.require('./a.jsx');
// 编译 yml 脚本为自定义的内容(如 API 集合) 并加载
sbox.setModuleCompiler('.yml', yaml2Rest)
sbox.setModuleCompiler('.yaml', yaml2Rest)
// 编译 markdown 为自定义的内容(如 html 字符串或 XmlDocument 对象) 并加载
sbox.setModuleCompiler('.md', mdCompiler)
sbox.setModuleCompiler('.markdown', mdCompiler)
toString
Devolve a representación de cadea do obxecto, xeralmente devolve "[Obxecto nativo]", o obxecto pode reimplementarse segundo as súas propias características
1String SandBox.toString();
Resultado de volta:
- String, Devolve a representación de cadea do obxecto
toJSON
Devolve a representación en formato JSON do obxecto, xeralmente devolve unha colección de atributos lexibles definidos polo obxecto
1Value SandBox.toJSON(String key = "");
Parámetros de chamada:
- key: Cadea, sen usar
Resultado de volta:
- Value, Devolve un valor que contén JSON serializable