Objet Sandbox
Objet sandbox de sécurité, utilisé pour gérer un espace d'exploitation indépendant
Tout le code s'exécute dans son propre bac à sable, l'exigence globale 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 et restreint l'accès au module de base globalassert Module, 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');
Héritage
Constructeur
SandBox
Construire un nouvel objet sandbox de sécurité et initialiser le module de base
1new SandBox(Object mods);
Paramètres d'appel :
- mods: Objet, spécifiez le dictionnaire d'objets du module à ajouter
Construire un nouvel objet sandbox de sécurité et initialiser le module de base
1
2new SandBox(Object mods,
Function require);
Paramètres d'appel :
- mods: Objet, spécifiez le dictionnaire d'objets du module à ajouter
- require: fonction, fonction personnalisée requise, lorsque le module n'existe pas, appelez d'abord la fonction personnalisée, puis chargez à partir du fichier sans retourner
Construisez un nouvel objet sandbox de sécurité globale indépendant et initialisez le module de base
1
2new SandBox(Object mods,
Object global);
Paramètres d'appel :
- mods: Objet, spécifiez le dictionnaire d'objets du module à ajouter
- global: Objet, spécifiez la propriété Global initialisée
Construisez un nouvel objet sandbox de sécurité globale indépendant et initialisez le module de base
1
2
3new SandBox(Object mods,
Function require,
Object global);
Paramètres d'appel :
- mods: Objet, spécifiez le dictionnaire d'objets du module à ajouter
- require: fonction, fonction personnalisée requise, lorsque le module n'existe pas, appelez d'abord la fonction personnalisée, puis chargez à partir du fichier sans retourner
- global: Objet, spécifiez la propriété Global initialisée
Attributs des membres
global
Objet, requête sandbox global Objet
1readonly Object SandBox.global;
modules
Objet, interroge l'objet dictionnaire de tous les modules existants dans le bac à sable
1readonly Object SandBox.modules;
Fonction membre
add
Ajouter un module de base au bac à sable
1
2SandBox.add(String id,
Value mod);
Paramètres d'appel :
- id: String, spécifiez 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écifiez 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écifiez le dictionnaire d'objets du module à ajouter, le module javascript ajouté générera une copie pour éviter l'interférence des objets de modification du sandbox
addScript
Ajouter un module de script au bac à sable
1
2Value SandBox.addScript(String srcname,
Buffer script);
Paramètres d'appel :
- srcname: String, spécifiez le nom du script à ajouter, srcname doit inclure l'extension, telle que json Ou js, jsc
- script: Buffer, Spécifiez le code binaire à ajouter
Résultat de retour :
- Value, Renvoie l'objet module chargé
remove
Supprimer le module de base spécifié du bac à sable
1SandBox.remove(String id);
Paramètres d'appel :
- id: String, spécifiez le nom du module à supprimer, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit être un chemin absolu ou un nom de module
has
Détecter l'existence du module de base depuis le bac à sable
1Boolean SandBox.has(String id);
Paramètres d'appel :
- id: String, spécifiez le nom du module à détecter, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit être un chemin absolu ou un nom de module
Résultat de retour :
- Boolean, existe-t-il
clone
Copiez le bac à sable actuel, le nouveau bac à sable contient les modules du bac à sable actuel, avec le même nom et la fonction require
1SandBox SandBox.clone();
Résultat de retour :
- SandBox, Nouveau bac à sable copié
freeze
Geler le bac à sable actuel, le bac à sable après le gel, à droite global Les modifications apportées seront ignorées
1SandBox.freeze();
refresh
Recharger le module dans le bac à sable, cette opération ne fera que réinitialiser le module, réinitialiser les variables dans le module et ne pas mettre à jour le code du module
1SandBox.refresh();
run
Exécuter un script
1
2SandBox.run(String fname,
Array argv = []);
Paramètres d'appel :
- fname: String, spécifiez le chemin du script à exécuter, ce chemin n'a rien à voir avec le script en cours d'exécution, il doit s'agir d'un chemin absolu
- argv: Array, spécifiez le paramètre à exécuter, ce paramètre peut être obtenu en utilisant argv dans le script
resolve
Interroger un module et renvoyer le nom de fichier complet du module
1
2String SandBox.resolve(String id,
String base);
Paramètres d'appel :
- id: String, spécifiez le nom du module à charger
- base: chaîne, spécifiez le chemin de recherche
Résultat de retour :
- String, Renvoie le nom de fichier complet du module chargé
require
Charger un module et retourner l'objet module
1
2Value SandBox.require(String id,
String base);
Paramètres d'appel :
- id: String, spécifiez le nom du module à charger
- base: chaîne, spécifiez le chemin de recherche
Résultat de retour :
- Value, Renvoie l'objet module chargé
setModuleCompiler
Ajoutez le compilateur au nom d'ext spécifié, le nom d'ext ne peut pas être l'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'ext spécifié, doit commencer par '.', et est une extension intégrée non-système
- compiler: Fonction, compile la fonction de rappel, tous les fichiers avec le nom d'ext n'en auront besoin 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({});
// 编译 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
Renvoie la représentation sous forme de chaîne de l'objet, renvoie généralement "[Objet natif]", l'objet peut être ré-implémenté selon ses propres caractéristiques
1String SandBox.toString();
Résultat de retour :
- String, Renvoie la représentation sous forme de chaîne de l'objet
toJSON
Renvoie la représentation au format JSON de l'objet, renvoie généralement une collection d'attributs lisibles définis par l'objet
1Value SandBox.toJSON(String key = "");
Paramètres d'appel :
- key: chaîne, inutilisé
Résultat de retour :
- Value, Renvoie une valeur contenant JSON sérialisable