Je construis un site Web public où les utilisateurs partagent des données et des scripts pour exécuter certaines données. Les scripts sont exécutés côté serveur dans une sorte de bac à sable sans autre interaction ce cycle: mon programme Perl lit dans une base de données un script créé par l'utilisateur, ajoute les données à traiter dans le script (c'est-à-dire: un document JSON) puis appelle l'interpréteur, il renvoie la réponse (un document JSON ou du texte brut), je l'enregistre dans la base de données avec mon script perl. Le script devrait pouvoir avoir moi-même un accès aux fonctions intégrées ajoutées au langage de script, mais rien de plus.
J'ai donc trébuché sur node.js en tant qu'interprète javascript, et il y a environ une heure avec le V8 de Google (le v8 a-t-il du sens pour ce genre de chose?). CoffeeScript m'est également venu à l'esprit, car il a l'air bien et c'est toujours Javascript.
Je pense que javascript est assez répandu et plus "sandboxeable" car il n'a pas d'appels OS ou quoi que ce soit à distance non sécurisé (je pense).
par ailleurs, j'écris le système sur Perl et Php pour le front-end.
Pour améliorer la question: je choisis Javascript parce que je pense qu'il est suffisamment sûr et simple à implémenter avec node.js, mais quelles sont les autres alternatives pour réaliser ce genre de tâche? Lua? Python? Je ne peux tout simplement pas trouver d'informations sur la façon d'exécuter correctement un interpréteur en bac à sable.
Réponses:
Java contient un interpréteur JavaScript intégré. Il n'est pas mis en sandbox par défaut, mais cela peut être activé par:
java = undefined;Packages = undefined;org = undefined;
Dans ce cas, les scripts exécutés à l'intérieur ne devraient en aucun cas pouvoir accéder à l'environnement extérieur.
Il fournit également un délai d'expiration du script et une fonctionnalité de limitation du nombre d'instructions utiles pour le sandboxing - vous pouvez limiter la durée ou la complexité du script.
J'ai utilisé cela dans Java 7 qui a un moteur JavaScript Rhino. Java 8 a un moteur Nashorn plus récent et plus moderne - je ne l'ai pas essayé avec Nashorn mais je pense qu'il devrait être similaire.
la source
window
variables pour JavaScript pour permettre l'interaction.ma première pensée a été node.js - comme vous l'avez mentionné ci-dessus, c'est un interpréteur javascript. Et c'est exactement la chose dont vous avez besoin, si vous voulez mettre les scripts en sandbox d'une manière vraiment sécurisée.
Une autre façon pourrait être que vous vérifiiez chaque commande dans un script, si elle est valide ou non. Mais je ne pense pas que vous obtiendrez un bac à sable sécurisé.
Salutations
la source