Objeto incorporado

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 8
var 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

1
new 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 2
new 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 2
new 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 3
new 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

1
readonly Object SandBox.global;

modules

Objeto, consulta el objeto de diccionario de todos los módulos existentes en el sandbox

1
readonly Object SandBox.modules;

función miembro

addBuiltinModules

Agregue módulos base integrados al sandbox

1
SandBox.addBuiltinModules();

add

Agregar un módulo base al sandbox

1 2
SandBox.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

1
SandBox.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 2
Value 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

1
SandBox.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

1
Boolean 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.

1
SandBox 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

1
SandBox.freeze();

run

ejecutar un script

1
SandBox.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 2
String 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 2
Value 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 2
SandBox.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 22
var 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.

1
String 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.

1
Value SandBox.toJSON(String key = "");

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable