Я создаю общедоступный веб-сайт, где пользователи обмениваются данными и сценариями для обработки некоторых данных. Сценарии выполняются на сервере в какой-то песочнице без какого-либо другого взаимодействия в этом цикле: моя Perl-программа считывает из базы данных созданный пользователем сценарий, добавляет данные для обработки в сценарий (то есть: документ JSON), затем вызывает интерпретатор, он возвращает ответ (документ в формате JSON или простой текст), я сохраняю его в базе данных с помощью моего perl-скрипта. Скрипт должен иметь возможность доступа к встроенным функциям, добавленным мной к языку сценариев, но не более того.
Итак, я наткнулся на node.js как интерпретатор javascript, и примерно час назад с Google V8 (имеет ли смысл v8 для такого рода вещей?). CoffeeScript также пришёл мне в голову, так как выглядит красиво и всё ещё является Javascript.
Я думаю, что javascript достаточно широко распространен и более «песочничен», поскольку в нем нет вызовов ОС или чего-то небезопасного (я думаю).
Кстати, я пишу систему на Perl и Php для внешнего интерфейса.
Чтобы улучшить вопрос: я выбираю Javascript, потому что я думаю, что он безопасен и достаточно прост для реализации с помощью node.js, но какие еще есть альтернативы для решения такого рода задач? Lua? Python? Я просто не могу найти информацию о том, как правильно запустить интерпретатора в песочнице.
Ответы:
Java содержит встроенный интерпретатор JavaScript. По умолчанию это не песочница, но это может быть включено:
java = undefined;Packages = undefined;org = undefined;
Если вы сделаете это, скрипты, работающие внутри, не должны иметь никакого доступа к внешней среде.
Он также предоставляет функцию ограничения времени ожидания скрипта и количества команд, что полезно для песочницы - вы можете ограничить продолжительность и сложность скрипта.
Я использовал это в Java 7, которая имеет движок Rhino JavaScript. Java 8 имеет более новый, более современный движок Nashorn - я не пробовал его с Nashorn, но я ожидаю, что он должен быть похожим.
источник
window
переменные для JavaScript, чтобы обеспечить взаимодействие.моей первой мыслью был node.js - как вы упоминали выше, это интерпретатор javascript. И это как раз то, что вам нужно, если вы хотите поместить скрипты в песочницу действительно безопасным способом.
Другим способом может быть то, что вы проверяете каждую команду в скрипте, если она действительна или нет. Но я не думаю, что вы получите безопасную песочницу.
Приветствую
источник