ObjectSandBox
Isoliertes Sandbox-Objekt, das zur Verwaltung eines unabhängigen Laufbereichs verwendet wird
Der gesamte Code wird in einer eigenen Sandbox ausgeführt. Die globale Anforderung ruft die aktuelle Sandbox auf, um das Modul zu laden, und die Sandbox wird über die Anforderung an die geladene Sandbox übergeben. Im folgenden Beispiel wird eine Sandbox erstellt, die den Zugriff nur auf globale Basismodule beschränkt.assertModul und fügen Sie zwei benutzerdefinierte Module a und b hinzu:
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');
Es ist zu beachten, dass es sich bei SandBox nicht um eine angriffssichere Sicherheitssandbox handelt. SandBox ist lediglich ein unabhängiger laufender Bereich, der zur Isolierung verschiedener Codes und zur Vermeidung gegenseitiger Beeinträchtigungen verwendet werden kann, jedoch keinen schädlichen Code verhindern kann.
Erbschaftsverhältnis
Konstrukteur
SandBox
Erstellen Sie ein neues Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul
1new SandBox(Object mods = {});
Aufrufparameter:
- mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
Erstellen Sie ein neues Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul
1
2new SandBox(Object mods,
Function require);
Aufrufparameter:
- mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
- require: Funktion, eine benutzerdefinierte Anforderungsfunktion. Wenn das Modul nicht vorhanden ist, wird die benutzerdefinierte Funktion zuerst ohne Rückgabe aufgerufen und dann aus der Datei geladen.
Erstellen Sie ein neues unabhängiges globales Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul
1
2new SandBox(Object mods,
Object global);
Aufrufparameter:
- mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
- global: Objekt, gibt die initialisierte globale Eigenschaft an
Erstellen Sie ein neues unabhängiges globales Isolations-Sandbox-Objekt und initialisieren Sie das Basismodul
1
2
3new SandBox(Object mods,
Function require,
Object global);
Aufrufparameter:
- mods: Objekt, gibt das hinzuzufügende Modulobjektverzeichnis an
- require: Funktion, eine benutzerdefinierte Anforderungsfunktion. Wenn das Modul nicht vorhanden ist, wird die benutzerdefinierte Funktion zuerst ohne Rückgabe aufgerufen und dann aus der Datei geladen.
- global: Objekt, gibt die initialisierte globale Eigenschaft an
Mitgliedereigenschaften
global
Objekt, Abfrage-SandboxglobalObjekt
1readonly Object SandBox.global;
modules
Objekt: Fragen Sie das Wörterbuchobjekt aller vorhandenen Module in der Sandbox ab
1readonly Object SandBox.modules;
Mitgliedsfunktion
addBuiltinModules
Fügen Sie der Sandbox integrierte Basismodule hinzu
1SandBox.addBuiltinModules();
add
Fügen Sie der Sandbox ein Basismodul hinzu
1
2SandBox.add(String id,
Value mod);
Aufrufparameter:
- id: String, gibt den Namen des hinzuzufügenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.
- mod: Wert, gibt das hinzuzufügende Modulobjekt an
Fügen Sie der Sandbox eine Reihe von Basismodulen hinzu
1SandBox.add(Object mods);
Aufrufparameter:
- mods: Objekt, gibt das hinzuzufügende Modulobjektwörterbuch an. Das hinzugefügte Javascript-Modul generiert eine Kopie, um gegenseitige Störungen zwischen Sandbox-Änderungsobjekten zu vermeiden.
addScript
Fügen Sie der Sandbox ein Skriptmodul hinzu
1
2Value SandBox.addScript(String srcname,
Buffer script);
Aufrufparameter:
- srcname: String, gibt den Namen des hinzuzufügenden Skripts an, srcname muss die Erweiterung enthalten, zjsonOder js, jsc
- script:Buffer, gibt den hinzuzufügenden Binärcode an
Rückgabeergebnisse:
- Value, gibt das geladene Modulobjekt zurück
remove
Entfernt das angegebene Basismodul aus der Sandbox
1SandBox.remove(String id);
Aufrufparameter:
- id: String, gibt den Namen des zu löschenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.
has
Erkennen Sie, ob das Basismodul in der Sandbox vorhanden ist
1Boolean SandBox.has(String id);
Aufrufparameter:
- id: String, gibt den Namen des zu erkennenden Moduls an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun. Es muss ein absoluter Pfad oder Modulname sein.
Rückgabeergebnisse:
- Boolean, existiert es
clone
Kopieren Sie die aktuelle Sandbox. Die neue Sandbox enthält die Module der aktuellen Sandbox mit demselben Namen und derselben erforderlichen Funktion.
1SandBox SandBox.clone();
Rückgabeergebnisse:
- SandBox, neue Sandbox kopiert
freeze
Frieren Sie die aktuelle Sandbox und die eingefrorene Sandbox ein.globalVorgenommene Änderungen werden ignoriert
1SandBox.freeze();
run
Führen Sie ein Skript aus
1SandBox.run(String fname);
Aufrufparameter:
- fname: String, gibt den Pfad des auszuführenden Skripts an. Dieser Pfad hat nichts mit dem aktuell ausgeführten Skript zu tun und muss ein absoluter Pfad sein.
resolve
Fragen Sie ein Modul ab und geben Sie den vollständigen Dateinamen des Moduls zurück
1
2String SandBox.resolve(String id,
String base);
Aufrufparameter:
- id: String, gibt den Namen des zu ladenden Moduls an
- base: Zeichenfolge, geben Sie den Suchpfad an
Rückgabeergebnisse:
- String, gibt den vollständigen Dateinamen des geladenen Moduls zurück
require
Lädt ein Modul und gibt das Modulobjekt zurück
1
2Value SandBox.require(String id,
String base);
Aufrufparameter:
- id: String, gibt den Namen des zu ladenden Moduls an
- base: Zeichenfolge, geben Sie den Suchpfad an
Rückgabeergebnisse:
- Value, gibt das geladene Modulobjekt zurück
setModuleCompiler
Fügen Sie dem angegebenen Ext-Namen einen Compiler hinzu. Der Ext-Name darf keine im System integrierte Erweiterung sein (einschließlich {'.js', '.json', '.jsc', '.wasm'}), muss der Compiler ein gültiges Javascript-Skript zurückgeben.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Aufrufparameter:
- extname: Zeichenfolge, der angegebene Extname muss mit „.“ beginnen und ist eine nicht im System integrierte Erweiterung.
- compiler: Funktion, Kompilierungsrückruffunktion, alle Dateien mit extname werden nur einmal benötigt. Das Format der Rückruffunktion ist
compiler(buf, requireInfo)
, buf ist die gelesene DateiBuffer, die requireInfo-Struktur ist{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
Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.
1String SandBox.toString();
Rückgabeergebnisse:
- String, gibt die Zeichenfolgendarstellung des Objekts zurück
toJSON
Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.
1Value SandBox.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnisse:
- Value, gibt einen Wert zurück, der JSON serialisierbar enthält