@Faradey
программист, php, golang

Как выполнить javascript-код в песочнице на сервере?

Стоит задача принимать от пользователя javascript-код и отрабатывать его на сервере. Важно, чтобы в пользовательском коде не срабатывали ajax, websocket и другие внешние запросы. Как вообще такое можно реализовать? Сначала подумалось, что на сервере установить что-то вроде node.js и с его помощью выполнять полученный от пользователя javascript-код, но как это сделать как бы в песочнице не понимаю. Подскажите какие есть для этого технологии?
  • Вопрос задан
  • 3989 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Есть такой неймспейс "vm", см. nodejs.org/api/vm.html В нем методы: vm.createContext(sandbox), vm.createScript(code, scriptName). Так же в нем класс Script и у него методы: script.runInThisContext(), script.runInNewContext(sandbox). В общем, можно создать песочницу, у которой даже не будет доступа к require, и пробросить в нее только те функции, что нужны для безопасного выполнения скрипта. Потом обернуть выполнение скрипта в Domain, см. nodejs.org/api/domain.html И тогда уж все будет точно безопасно, и доступ ко внешнему миру будет у скрипта закрыт и если он свалится, то через domain можно поймать, и global он своими данными не засрет, т.е. песочницу можно убить и создать новую, даже не перезапуская процесс ноды. Пример использования можно подсмотреть тут: https://github.com/tshemsedinov/impress/blob/maste... Там есть некоторые хитрости, например, как сделать примесь своих функций к базовым классам в песочнице и подобное.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы