Obxecto incorporado

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

Herdanza

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<this>SandBox|new SandBox()|global;modules|add();addScript();remove();has();clone();freeze();refresh();run();resolve();require();setModuleCompiler()] [object] <:- [SandBox] SandBox new SandBox() global modules add() addScript() remove() has() clone() freeze() refresh() run() resolve() require() setModuleCompiler() object toString() toJSON()

Construtor

SandBox

Constrúe un novo obxecto sandbox de seguridade e inicialice o módulo básico

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

1
readonly Object SandBox.global;

modules

Obxecto, consulta o obxecto de dicionario de todos os módulos existentes no sandbox

1
readonly Object SandBox.modules;

Función de membro

add

Engade un módulo básico ao sandbox

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

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

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

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

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

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

1
SandBox.refresh();

run

Executa un script

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

Devolve a representación de cadea do obxecto, xeralmente devolve "[Obxecto nativo]", o obxecto pode reimplementarse segundo as súas propias características

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

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

Parámetros de chamada:

  • key: Cadea, sen usar

Resultado de volta:

  • Value, Devolve un valor que contén JSON serializable