Objeto objeto incorporado

Objeto SandBox

Objeto sandbox de seguridad para administrar un solo espacio en ejecución

Todo el código se ejecuta en su propia caja de arena. El siguiente ejemplo crea un entorno limitado que restringe el acceso al módulo de assert en el módulo base global y agrega dos módulos personalizados ayb:

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');

Herencia

Constructor

SandBox

Construya un nuevo objeto sandbox de seguridad e inicialice el módulo base

1
new SandBox(Object mods);

Parámetros de llamada:

  • mods : Object, especifica un diccionario de objetos de módulo para agregar

Construya un nuevo objeto sandbox de seguridad e inicialice el módulo base

1 2
new SandBox(Object mods, Function require);

Parámetros de llamada:

  • mods : Object, especifica un diccionario de objetos de módulo para agregar
  • require : Function, una función require personalizada. Cuando el módulo no existe, se llama primero a la función personalizada. Si no hay retorno, se carga desde el archivo.

Construya un nuevo objeto de caja de seguridad de Global Security e inicialice el módulo base

1 2
new SandBox(Object mods, Object global);

Parámetros de llamada:

  • mods : Object, especifica un diccionario de objetos de módulo para agregar
  • global : Object, especifica la propiedad global inicializada

Construya un nuevo objeto de caja de seguridad de Global Security e inicialice el módulo base

1 2 3
new SandBox(Object mods, Function require, Object global);

Parámetros de llamada:

  • mods : Object, especifica un diccionario de objetos de módulo para agregar
  • require : Function, una función require personalizada. Cuando el módulo no existe, se llama primero a la función personalizada. Si no hay retorno, se carga desde el archivo.
  • global : Object, especifica la propiedad global inicializada

Atributos de miembro

global

Objeto, consulta el objeto global sandbox

1
readonly Object SandBox.global;

modules

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

1
readonly Object SandBox.modules;

Función miembro

add

Agregar un módulo base al sandbox

1 2
SandBox.add(String id, Value mod);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se va a agregar, esta ruta no está relacionada con el script actual, debe ser una ruta absoluta o un nombre de módulo
  • mod : Value, 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 : Object, 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 sandbox

addScript

Agregar un módulo de secuencia de comandos al entorno limitado

1 2
Value SandBox.addScript(String srcname, Buffer script);

Parámetros de llamada:

  • srcname : String, especifique el nombre del script que se agregará, srcname debe incluir la extensión, como json o js, ​​jsc
  • script : Buffer , especifica el código binario que se agregará

Devuelve el resultado:

  • Value , devuelve el objeto del módulo cargado

remove

Retire el módulo base especificado de la caja de arena

1
SandBox.remove(String id);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo para eliminar

has

Detecta la existencia del módulo base desde el sandbox

1
Boolean SandBox.has(String id);

Parámetros de llamada:

  • id : String, especifique el nombre del módulo que se detectará, esta ruta no está relacionada con el script en ejecución actual, debe ser una ruta absoluta o un nombre de módulo

Devuelve el resultado:

  • Boolean , si existe

clone

Duplicar 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();

Devuelve el resultado:

  • SandBox , nuevo sandbox copiado

freeze

Congele el sandbox actual y el sandbox congelado. Las modificaciones realizadas en global serán ignoradas.

1
SandBox.freeze();

refresh

Vuelva a cargar el módulo en el entorno limitado. Esta operación solo reinicia el módulo, restablece las variables en el módulo y no actualiza el código del módulo.

1
SandBox.refresh();

run

Ejecuta un script

1 2
SandBox.run(String fname, Array argv = []);

Parámetros de llamada:

  • fname : String, especifique la ruta de la secuencia de comandos para ejecutar, esta ruta no está relacionada con la secuencia de comandos que se está ejecutando actualmente y debe ser una ruta absoluta
  • argv : Array, especifique los parámetros a ejecutar, este parámetro se puede obtener en el script usando argv

resolve

Consultar un módulo y devolver el nombre de archivo completo del módulo

1 2
String SandBox.resolve(String id, String base);

Parámetros de llamada:

  • id : String, especifica el nombre del módulo que se cargará
  • base : String, especifica la ruta de búsqueda

Devuelve el resultado:

  • String , devuelve el nombre de archivo completo del módulo cargado

require

Cargue un módulo y devuelva el objeto del módulo

1 2
Value SandBox.require(String id, String base);

Parámetros de llamada:

  • id : String, especifica el nombre del módulo que se cargará
  • base : String, especifica la ruta de búsqueda

Devuelve el resultado:

  • Value , devuelve el objeto del módulo cargado

setModuleCompiler

Agregue un compilador al extname especificado. El extname no puede ser una extensión incorporada del sistema (incluyendo ('.js', '. json ', '.jsc', '.wasm')), y el compilador debe devolver un script JavaScript válido.

1 2
SandBox.setModuleCompiler(String extname, Function compiler);

Parámetros de llamada:

  • extname : String, el extname especificado, debe comenzar con '.', y es una extensión incorporada que no es del sistema
  • compiler : función, compilar la función de devolución de llamada, todos los archivos con extname se requerirán solo una vez. El formato de la función de devolución de llamada es compiler(buf, requireInfo) , buf es el Buffer lectura del archivo y requireInfo estructura 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({}); // 编译 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

Devuelve una representación de cadena del objeto, generalmente "[Objeto nativo]". Los objetos se pueden volver a implementar de acuerdo con sus propias características

1
String SandBox.toString();

Devuelve el resultado:

  • String , devuelve una representación de cadena del objeto

toJSON

Devuelve una representación 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, sin usar

Devuelve el resultado:

  • Value , devuelve un valor que contiene un JSON serializable