ObjetoSandBox
Objeto sandbox aislado, utilizado para gestionar un espacio de ejecución independiente
Todo el código se ejecuta en su propio entorno limitado. El requisito global llamará al entorno limitado actual para cargar el módulo, y el entorno limitado se pasará al entorno limitado cargado a través de require. El siguiente ejemplo crea un entorno limitado que restringe el acceso solo a módulos base globales.assertmódulo y agregue dos módulos personalizados a y 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');
Cabe señalar que SandBox no es un entorno limitado de seguridad a prueba de ataques. SandBox es solo un espacio de ejecución independiente que se puede utilizar para aislar diferentes códigos y evitar interferencias mutuas, pero no puede prevenir códigos maliciosos.
relación de herencia
Constructor
SandBox
Construya un nuevo objeto de aislamiento sandbox e inicialice el módulo básico
1new SandBox(Object mods = {});
Parámetros de llamada:
- mods: Objeto, especifica el diccionario de objetos del módulo que se agregará
Construya un nuevo objeto de aislamiento sandbox e inicialice el módulo básico
1
2new SandBox(Object mods,
Function require);
Parámetros de llamada:
- mods: Objeto, especifica el diccionario de objetos del módulo que se agregará
- require: Función, una función requerida personalizada. Cuando el módulo no existe, la función personalizada se llama primero, sin retorno, y luego se carga desde el archivo.
Construya un nuevo objeto de zona de pruebas de aislamiento global independiente e inicialice el módulo básico
1
2new SandBox(Object mods,
Object global);
Parámetros de llamada:
- mods: Objeto, especifica el diccionario de objetos del módulo que se agregará
- global: Objeto, especifica la propiedad global inicializada
Construya un nuevo objeto de zona de pruebas de aislamiento global independiente e inicialice el módulo básico
1
2
3new SandBox(Object mods,
Function require,
Object global);
Parámetros de llamada:
- mods: Objeto, especifica el diccionario de objetos del módulo que se agregará
- require: Función, una función requerida personalizada. Cuando el módulo no existe, la función personalizada se llama primero, sin retorno, y luego se carga desde el archivo.
- global: Objeto, especifica la propiedad global inicializada
propiedades de miembros
global
Objeto, zona de pruebas de consultaglobalobjeto
1readonly Object SandBox.global;
modules
Objeto, consulta el objeto de diccionario de todos los módulos existentes en el sandbox
1readonly Object SandBox.modules;
función miembro
addBuiltinModules
Agregue módulos base integrados al sandbox
1SandBox.addBuiltinModules();
add
Agregar un módulo base al sandbox
1
2SandBox.add(String id,
Value mod);
Parámetros de llamada:
- id: Cadena, especifica el nombre del módulo que se agregará. Esta ruta no tiene nada que ver con el script que se está ejecutando actualmente. Debe ser una ruta absoluta o un nombre de módulo.
- mod: Valor, especifica el objeto del módulo que se agregará
Agregue un conjunto de módulos base al sandbox
1SandBox.add(Object mods);
Parámetros de llamada:
- mods: Objeto, especifica el diccionario de objetos del módulo que se agregará. El módulo javascript agregado generará una copia para evitar interferencias mutuas entre los objetos de modificación de la zona de pruebas.
addScript
Agregar un módulo de script al sandbox
1
2Value SandBox.addScript(String srcname,
Buffer script);
Parámetros de llamada:
- srcname: Cadena, especifica el nombre del script que se agregará, srcname debe incluir la extensión, comojsonO js, jsc
- script:Buffer, especifica el código binario que se agregará
Resultados de devolución:
- Value, devuelve el objeto del módulo cargado
remove
Elimina el módulo base especificado del sandbox
1SandBox.remove(String id);
Parámetros de llamada:
- id: Cadena, especifica el nombre del módulo que se eliminará. Esta ruta no tiene nada que ver con el script que se está ejecutando actualmente. Debe ser una ruta absoluta o un nombre de módulo.
has
Detectar si el módulo básico existe desde el sandbox
1Boolean SandBox.has(String id);
Parámetros de llamada:
- id: Cadena, especifica el nombre del módulo que se va a detectar. Esta ruta no tiene nada que ver con el script que se está ejecutando actualmente. Debe ser una ruta absoluta o un nombre de módulo.
Resultados de devolución:
- Boolean, existe
clone
Copie el sandbox actual. El nuevo sandbox contiene los módulos del sandbox actual con el mismo nombre y requiere función.
1SandBox SandBox.clone();
Resultados de devolución:
- SandBox, copiado nuevo sandbox
freeze
Congele la zona de pruebas actual y la zona de pruebas congelada.globalLos cambios realizados serán ignorados
1SandBox.freeze();
run
ejecutar un script
1SandBox.run(String fname);
Parámetros de llamada:
- fname: Cadena, especifica la ruta del script que se ejecutará. Esta ruta no tiene nada que ver con el script que se está ejecutando actualmente y debe ser una ruta absoluta.
resolve
Consulta un módulo y devuelve el nombre de archivo completo del módulo.
1
2String SandBox.resolve(String id,
String base);
Parámetros de llamada:
- id: Cadena, especifica el nombre del módulo a cargar
- base: Cadena, especifique la ruta de búsqueda
Resultados de devolución:
- String, devuelve el nombre de archivo completo del módulo cargado
require
Carga un módulo y devuelve el objeto del módulo.
1
2Value SandBox.require(String id,
String base);
Parámetros de llamada:
- id: Cadena, especifica el nombre del módulo a cargar
- base: Cadena, especifique la ruta de búsqueda
Resultados de devolución:
- Value, devuelve el objeto del módulo cargado
setModuleCompiler
Agregue un compilador al nombre externo especificado. El nombre externo no puede ser una extensión integrada en el sistema (incluido {'.js', '.json', '.jsc', '.wasm'}), el compilador debe devolver un script javascript válido.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Parámetros de llamada:
- extname: Cadena, el nombre externo especificado debe comenzar con '.' y es una extensión no integrada en el sistema.
- compiler: Función, función de devolución de llamada de compilación, todos los archivos con extname solo se requerirán una vez. El formato de la función de devolución de llamada es
compiler(buf, requireInfo)
, buf es el archivo leídoBuffer, la estructura requireInfo es{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
Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.
1String SandBox.toString();
Resultados de devolución:
- String, devuelve la representación de cadena del objeto
toJSON
Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.
1Value SandBox.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable