ObjetSandBox
Objet sandbox isolé, utilisé pour gérer un espace d'exécution indépendant
Tout le code s'exécute dans son propre bac à sable. Le require global appellera le bac à sable actuel pour charger le module, et le bac à sable sera transmis au bac à sable chargé via require. L'exemple suivant crée un bac à sable qui restreint l'accès aux seuls modules de base globaux.assertmodule et ajoutez deux modules personnalisés a et b :
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');
Il convient de noter que SandBox n'est pas un bac à sable de sécurité à l'épreuve des attaques. SandBox est simplement un espace d'exécution indépendant qui peut être utilisé pour isoler différents codes et éviter les interférences mutuelles, mais il ne peut pas empêcher les codes malveillants.
relation d'héritage
Constructeur
SandBox
Construisez un nouvel objet sandbox d'isolation et initialisez le module de base
1new SandBox(Object mods = {});
Paramètres d'appel :
- mods: Objet, spécifie le dictionnaire d'objets du module à ajouter
Construisez un nouvel objet sandbox d'isolation et initialisez le module de base
1
2new SandBox(Object mods,
Function require);
Paramètres d'appel :
- mods: Objet, spécifie le dictionnaire d'objets du module à ajouter
- require: Fonction, une fonction require personnalisée. Lorsque le module n'existe pas, la fonction personnalisée est d'abord appelée, sans retour, puis chargée à partir du fichier.
Construire un nouvel objet sandbox d'isolation global indépendant et initialiser le module de base
1
2new SandBox(Object mods,
Object global);
Paramètres d'appel :
- mods: Objet, spécifie le dictionnaire d'objets du module à ajouter
- global: Objet, spécifie la propriété Globale initialisée
Construire un nouvel objet sandbox d'isolation global indépendant et initialiser le module de base
1
2
3new SandBox(Object mods,
Function require,
Object global);
Paramètres d'appel :
- mods: Objet, spécifie le dictionnaire d'objets du module à ajouter
- require: Fonction, une fonction require personnalisée. Lorsque le module n'existe pas, la fonction personnalisée est d'abord appelée, sans retour, puis chargée à partir du fichier.
- global: Objet, spécifie la propriété Globale initialisée
propriétés des membres
global
Objet, bac à sable de requêteglobalobjet
1readonly Object SandBox.global;
modules
Objet, interrogez l'objet dictionnaire de tous les modules existants dans le bac à sable
1readonly Object SandBox.modules;
fonction membre
addBuiltinModules
Ajouter des modules de base intégrés au bac à sable
1SandBox.addBuiltinModules();
add
Ajouter un module de base au bac à sable
1
2SandBox.add(String id,
Value mod);
Paramètres d'appel :
- id: String, spécifie le nom du module à ajouter. Ce chemin n'a rien à voir avec le script en cours d'exécution. Il doit s'agir d'un chemin absolu ou d'un nom de module.
- mod: Valeur, spécifie l'objet module à ajouter
Ajouter un ensemble de modules de base au bac à sable
1SandBox.add(Object mods);
Paramètres d'appel :
- mods: Objet, spécifie le dictionnaire d'objets du module à ajouter. Le module javascript ajouté générera une copie pour éviter les interférences mutuelles entre les objets de modification du bac à sable.
addScript
Ajouter un module de script au bac à sable
1
2Value SandBox.addScript(String srcname,
Buffer script);
Paramètres d'appel :
- srcname: String, spécifie le nom du script à ajouter, srcname doit inclure l'extension, telle quejsonOu js, jsc
- script:Buffer, précise le code binaire à ajouter
Résultats de retour :
- Value, renvoie l'objet module chargé
remove
Supprime le module de base spécifié du bac à sable
1SandBox.remove(String id);
Paramètres d'appel :
- id: String, spécifie le nom du module à supprimer. Ce chemin n'a rien à voir avec le script en cours d'exécution. Il doit s'agir d'un chemin absolu ou d'un nom de module.
has
Détecter si le module de base existe depuis le bac à sable
1Boolean SandBox.has(String id);
Paramètres d'appel :
- id: String, spécifie le nom du module à détecter. Ce chemin n'a rien à voir avec le script en cours d'exécution. Il doit s'agir d'un chemin absolu ou d'un nom de module.
Résultats de retour :
- Boolean, est-ce que ça existe
clone
Copiez le bac à sable actuel. Le nouveau bac à sable contient les modules du bac à sable actuel avec le même nom et la même fonction.
1SandBox SandBox.clone();
Résultats de retour :
- SandBox, copié le nouveau bac à sable
freeze
Gelez le bac à sable actuel et le bac à sable gelé.globalLes modifications apportées seront ignorées
1SandBox.freeze();
run
exécuter un script
1SandBox.run(String fname);
Paramètres d'appel :
- fname: String,spécifie le chemin du script à exécuter. Ce chemin n'a rien à voir avec le script en cours d'exécution et doit être un chemin absolu.
resolve
Interroge un module et renvoie le nom de fichier complet du module
1
2String SandBox.resolve(String id,
String base);
Paramètres d'appel :
- id: String, précise le nom du module à charger
- base : String, spécifiez le chemin de recherche
Résultats de retour :
- String, renvoie le nom de fichier complet du module chargé
require
Charge un module et renvoie l'objet module
1
2Value SandBox.require(String id,
String base);
Paramètres d'appel :
- id: String, précise le nom du module à charger
- base : String, spécifiez le chemin de recherche
Résultats de retour :
- Value, renvoie l'objet module chargé
setModuleCompiler
Ajoutez un compilateur au nom d'extension spécifié. Le nom d'ext ne peut pas être une extension intégrée au système (y compris {'.js', '.json', '.jsc', '.wasm'}), le compilateur doit renvoyer un script javascript valide.
1
2SandBox.setModuleCompiler(String extname,
Function compiler);
Paramètres d'appel :
- extname: String, le nom d'extension spécifié doit commencer par '.' et est une extension non intégrée au système.
- compiler: Fonction, fonction de rappel de compilation, tous les fichiers avec un nom d'extension n'en nécessiteront qu'une seule fois. Le format de la fonction de rappel est
compiler(buf, requireInfo)
, buf est le fichier luBuffer, la structure requireInfo est{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
Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.
1String SandBox.toString();
Résultats de retour :
- String, renvoie la représentation sous forme de chaîne de l'objet
toJSON
Renvoie une représentation au format JSON de l'objet, renvoyant généralement une collection de propriétés lisibles définies par l'objet.
1Value SandBox.toJSON(String key = "");
Paramètres d'appel :
- key: Chaîne, non utilisée
Résultats de retour :
- Value, renvoie une valeur contenant du JSON sérialisable