Objekt eingebautes Objekt

Objekt SandBox

Sicherheits-Sandbox-Objekt zum Verwalten eines einzelnen laufenden Speicherplatzes

Der gesamte Code wird in einer eigenen Sandbox ausgeführt. Die globale Anforderung ruft das aktuelle Sandbox-Lademodul auf, und die Sandbox wird über require an die geladene Sandbox übergeben. Im folgenden Beispiel wird eine Sandbox erstellt, die den Zugriff auf das assert Modul im globalen Basismodul einschränkt und zwei benutzerdefinierte Module a und b hinzufügt:

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

Vererbung

Konstruktor

SandBox

Erstellen Sie ein neues Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

1
new SandBox(Object mods);

Parameter aufrufen:

  • mods : Object, gibt ein Wörterbuch der hinzuzufügenden Modulobjekte an

Erstellen Sie ein neues Sicherheits-Sandbox-Objekt und initialisieren Sie das Basismodul

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

Parameter aufrufen:

  • mods : Object, gibt ein Wörterbuch der hinzuzufügenden Modulobjekte an
  • require : Function, eine benutzerdefinierte require-Funktion. Wenn das Modul nicht vorhanden ist, wird zuerst die benutzerdefinierte Funktion aufgerufen. Wenn keine Rückgabe erfolgt, wird die Funktion aus der Datei geladen.

Erstellt ein neues Global Security Sandbox-Objekt und initialisiert das Basismodul

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

Parameter aufrufen:

  • mods : Object, gibt ein Wörterbuch der hinzuzufügenden Modulobjekte an
  • global : Objekt, gibt die initialisierte globale Eigenschaft an

Erstellt ein neues Global Security Sandbox-Objekt und initialisiert das Basismodul

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

Parameter aufrufen:

  • mods : Object, gibt ein Wörterbuch der hinzuzufügenden Modulobjekte an
  • require : Function, eine benutzerdefinierte require-Funktion. Wenn das Modul nicht vorhanden ist, wird zuerst die benutzerdefinierte Funktion aufgerufen. Wenn keine Rückgabe erfolgt, wird die Funktion aus der Datei geladen.
  • global : Objekt, gibt die initialisierte globale Eigenschaft an

Mitgliedsattribute

global

Objekt, fragen Sie das global Sandbox-Objekt ab

1
readonly Object SandBox.global;

modules

Objekt, Wörterbuchobjekte aller Module in der Sandbox abfragen

1
readonly Object SandBox.modules;

Mitgliedsfunktion

add

Fügen Sie der Sandbox ein Basismodul hinzu

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

Parameter aufrufen:

  • id : String, gibt den Namen des hinzuzufügenden Moduls an. Dieser Pfad bezieht sich nicht auf das aktuell ausgeführte Skript. Es muss ein absoluter Pfad oder ein Modulname sein
  • mod : Wert, gibt das hinzuzufügende Modulobjekt an

Fügen Sie der Sandbox eine Reihe von Basismodulen hinzu

1
SandBox.add(Object mods);

Parameter aufrufen:

  • mods : Object, gibt das hinzuzufügende Modulobjektwörterbuch an. Das hinzugefügte Javascript-Modul generiert eine Kopie, um Sandboxen zu vermeiden, die das Objekt ändern und sich gegenseitig stören

addScript

Fügen Sie der Sandbox ein Skriptmodul hinzu

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

Parameter aufrufen:

  • srcname : String, geben Sie den Namen des hinzuzufügenden Skripts an. srcname muss die Erweiterung enthalten, z. B. json oder js, jsc
  • script : Buffer , gibt den hinzuzufügenden Binärcode an

Gibt das Ergebnis zurück:

  • Value , gibt das geladene Modulobjekt zurück

remove

Entfernen Sie das angegebene Basismodul aus der Sandbox

1
SandBox.remove(String id);

Parameter aufrufen:

  • id : String, gibt den Namen des zu löschenden Moduls an. Dieser Pfad bezieht sich nicht auf das aktuell ausgeführte Skript. Es muss sich um einen absoluten Pfad oder einen Modulnamen handeln

has

Erkennen Sie das Vorhandensein des Basismoduls in der Sandbox

1
Boolean SandBox.has(String id);

Parameter aufrufen:

  • id : String, gibt den Namen des zu erkennenden Moduls an. Dieser Pfad bezieht sich nicht auf das aktuell ausgeführte Skript, sondern muss ein absoluter Pfad oder ein Modulname sein

Gibt das Ergebnis zurück:

  • Boolean , ob es existiert

clone

Duplizieren Sie die aktuelle Sandbox. Die neue Sandbox enthält die Module der aktuellen Sandbox mit demselben Namen und der erforderlichen Funktion

1
SandBox SandBox.clone();

Gibt das Ergebnis zurück:

  • SandBox , neue Sandbox kopiert

freeze

Frieren Sie die aktuelle Sandbox und die eingefrorene Sandbox ein. Änderungen an global werden ignoriert.

1
SandBox.freeze();

refresh

Laden Sie das Modul erneut in die Sandbox. Dieser Vorgang initialisiert nur das Modul neu, setzt die Variablen im Modul zurück und aktualisiert den Modulcode nicht.

1
SandBox.refresh();

run

Führen Sie ein Skript aus

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

Parameter aufrufen:

  • fname : String, gibt den Pfad des auszuführenden Skripts an. Dieser Pfad bezieht sich nicht auf das aktuell ausgeführte Skript und muss ein absoluter Pfad sein
  • argv : Array, geben Sie die auszuführenden Parameter an. Dieser Parameter kann im Skript mit argv abgerufen werden

resolve

Fragen Sie ein Modul ab und geben Sie den vollständigen Dateinamen des Moduls zurück

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

Parameter aufrufen:

  • id : String, gibt den Namen des zu ladenden Moduls an
  • base : String, gibt den Suchpfad an

Gibt das Ergebnis zurück:

  • String , gibt den vollständigen Dateinamen des geladenen Moduls zurück

require

Laden Sie ein Modul und geben Sie das Modulobjekt zurück

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

Parameter aufrufen:

  • id : String, gibt den Namen des zu ladenden Moduls an
  • base : String, gibt den Suchpfad an

Gibt das Ergebnis zurück:

  • Value , gibt das geladene Modulobjekt zurück

setModuleCompiler

Fügen Sie dem angegebenen ext-Namen einen Compiler hinzu. Der ext-Name darf keine integrierte Erweiterung des Systems sein (einschließlich ('.js', ' json ', '.jsc', '.wasm')), und der Compiler muss ein gültiges Javascript-Skript zurückgeben.

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

Parameter aufrufen:

  • extname : String, der angegebene extname, muss mit '.' beginnen und ist eine nicht systemintegrierte Erweiterung
  • compiler : Funktion, Rückruffunktion kompilieren, alle Dateien mit extname werden nur einmal benötigt. Das Format der Rückruffunktion ist compiler(buf, requireInfo) , buf ist der Buffer gelesene Dateien und die Struktur requireInfo ist {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

Gibt eine Zeichenfolgendarstellung des Objekts zurück, normalerweise "[Native Object]". Objekte können gemäß ihren eigenen Merkmalen neu implementiert werden

1
String SandBox.toString();

Gibt das Ergebnis zurück:

  • String , gibt eine String-Darstellung des Objekts zurück

toJSON

Gibt eine JSON-Darstellung des Objekts zurück, die normalerweise eine Sammlung lesbarer Eigenschaften zurückgibt, die vom Objekt definiert wurden

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

Parameter aufrufen:

  • key : String, unbenutzt

Gibt das Ergebnis zurück:

  • Value , gibt einen Wert zurück, der einen serialisierbaren JSON enthält