ObjectSandBox
Obxecto sandbox illado, usado para xestionar un espazo de execución independente
Todo o código execútase na súa propia caixa de probas. O requisito global chamará á caixa de probas actual para cargar o módulo, e a caixa de probas pasarase á caixa de probas cargada mediante require. O seguinte exemplo crea unha caixa de probas que restrinxe o acceso só aos módulos básicos globais.assertmó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');
Cómpre sinalar que SandBox non é unha caixa de probas de seguridade a proba de ataques. SandBox é só un espazo de execución independente que se pode usar para illar códigos diferentes e evitar interferencias mutuas, pero non pode evitar códigos maliciosos.
relación de herdanza
Construtor
SandBox
Constrúe un novo obxecto sandbox de illamento e inicialice o módulo básico
1new SandBox(Object mods = {});
Parámetros de chamada:
- mods: Obxecto, especifica o dicionario de obxectos do módulo que se vai engadir
Constrúe un novo obxecto sandbox de illamento e inicialice o módulo básico
1
2new SandBox(Object mods,
Function require);
Parámetros de chamada:
- mods: Obxecto, especifica o dicionario de obxectos do módulo que se vai engadir
- require: Función, unha función de requirimento personalizada. Cando o módulo non existe, a función personalizada chámase primeiro, sen retorno, e despois cárgase desde o ficheiro.
Constrúe un novo obxecto independente de illamento global e inicialice o módulo básico
1
2new SandBox(Object mods,
Object global);
Parámetros de chamada:
- mods: Obxecto, especifica o dicionario de obxectos do módulo que se vai engadir
- global: Obxecto, especifica a propiedade global inicializada
Constrúe un novo obxecto independente de illamento global e inicialice o módulo básico
1
2
3new SandBox(Object mods,
Function require,
Object global);
Parámetros de chamada:
- mods: Obxecto, especifica o dicionario de obxectos do módulo que se vai engadir
- require: Función, unha función de requirimento personalizada. Cando o módulo non existe, a función personalizada chámase primeiro, sen retorno, e despois cárgase desde o ficheiro.
- global: Obxecto, especifica a propiedade global inicializada
propiedades dos membros
global
Obxecto, consulta sandboxglobalobxecto
1readonly Object SandBox.global;
modules
Obxecto, consulta o obxecto dicionario de todos os módulos existentes no sandbox
1readonly Object SandBox.modules;
función de membro
addBuiltinModules
Engade módulos básicos integrados ao sandbox
1SandBox.addBuiltinModules();
add
Engade un módulo base ao sandbox
1
2SandBox.add(String id,
Value mod);
Parámetros de chamada:
- id: Cadea, especifica o nome do módulo que se vai 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, especifica o dicionario de obxectos do módulo que se engadirá. O módulo javascript engadido xerará unha copia para evitar interferencias mutuas entre os 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: String, especifica o nome do script que se vai engadir, srcname debe incluír a extensión, comojsonOu js, jsc
- script:Buffer, especifica o código binario que se vai engadir
Resultados de devolución:
- Value, devolve o obxecto do módulo cargado
remove
Elimina o módulo base especificado da caixa de probas
1SandBox.remove(String id);
Parámetros de chamada:
- id: Cadea, especifica o nome do módulo que se vai 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
Detecta se o módulo básico existe desde o sandbox
1Boolean SandBox.has(String id);
Parámetros de chamada:
- id: Cadea, especifica o nome do módulo que se vai 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.
Resultados de devolución:
- Boolean, existe
clone
Copia o sandbox actual. O novo sandbox contén os módulos do mesmo nome e require unha función.
1SandBox SandBox.clone();
Resultados de devolución:
- SandBox, copiouse un novo sandbox
freeze
Conxela a caixa de area actual e a caixa de area conxelada.globalOs cambios realizados serán ignorados
1SandBox.freeze();
run
executar un script
1SandBox.run(String fname);
Parámetros de chamada:
- fname: Cadea, especifica o camiño do script que se vai executar. Este camiño non ten nada que ver co script en execución e debe ser un camiño absoluto.
resolve
Consulta un módulo e devolve o nome de ficheiro completo do módulo
1
2String SandBox.resolve(String id,
String base);
Parámetros de chamada:
- id: String, especifica o nome do módulo que se vai cargar
- base: Cadea, especifique a ruta de busca
Resultados de devolución:
- String, devolve o nome completo do ficheiro do módulo cargado
require
Carga un módulo e devolve o obxecto módulo
1
2Value SandBox.require(String id,
String base);
Parámetros de chamada:
- id: String, especifica o nome do módulo que se vai cargar
- base: Cadea, especifique a ruta de busca
Resultados de devolución:
- Value, devolve o obxecto do módulo cargado
setModuleCompiler
Engade un compilador ao extname especificado. O extname non pode ser unha extensión integrada do sistema (incluíndo {'.js', '.json', '.jsc', '.wasm'}), o compilador debe devolver un script javascript válido.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Parámetros de chamada:
- extname: Cadea, o extname especificado debe comezar por '.' e é unha extensión integrada non integrada no sistema.
- compiler: Función, función de devolución de chamada de compilación, todos os ficheiros con extname só precisarán unha vez. O formato da función de devolución de chamada é
compiler(buf, requireInfo)
, buf é o ficheiro de lecturaBuffer, 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({});
// 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
Devolve a representación en cadea do obxecto. Polo xeral, devólvese "[Obxecto nativo]". O obxecto pódese volver implementar segundo as súas propias características.
1String SandBox.toString();
Resultados de devolución:
- String, devolve a representación en cadea do obxecto
toJSON
Devolve unha representación en formato JSON do obxecto, devolvendo xeralmente unha colección de propiedades lexibles definidas polo obxecto.
1Value SandBox.toJSON(String key = "");
Parámetros de chamada:
- key: Cadena, non usada
Resultados de devolución:
- Value, devolve un valor que contén JSON serializable