Quels sont mes choix pour les scripts sandbox côté serveur? [fermé]

11

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.

alfa64
la source
Ce que vous demandez n'est pas clair. C'est possible? Bien sûr, c'est possible.
Robert Harvey

Réponses:

3

Java contient un interpréteur JavaScript intégré. Il n'est pas mis en sandbox par défaut, mais cela peut être activé par:

  • définition d'un obturateur de classe correct - JavaScript peut normalement charger des classes Java. L'obturateur de classe est une sorte de gestionnaire de sécurité qui décide quelles classes peuvent être chargées et lesquelles ne le peuvent pas.
  • script "startup" - courte initialisation JavaScript qui supprime les points d'accès au système externe: 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.

qbd
la source
Pouvez-vous mettre sur liste blanche plutôt que sur liste noire?
Petah
@Petah, vous pouvez tout d'abord désactiver (liste noire) puis pousser certaines fonctionnalités spécifiques sous forme d'objet dans le bac à sable. Il s'agit alors essentiellement d'une liste blanche, alors oui, vous pouvez le faire.
qbd
La connaissance de JavaScript est suffisamment répandue pour en faire un bon choix en tant que langage de script. Vous souhaiterez peut-être définir certains globaux ainsi que des appels pour les utilisateurs, car vous restreignez l'accès aux appels. Pensez à la façon dont le navigateur définit les windowvariables pour JavaScript pour permettre l'interaction.
Michael Shopsin
2

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

Tobi
la source
Existe-t-il un support de sandboxing i NodeJS ou disponible avec NodeJS?
ysdx
4
Trouvé ceci: gf3.github.com/sandbox
ysdx
+1 pour le grand lien vers le "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Jack Stone
Remarque: le bac à sable gf3 peut être cassé.
Petah