Каковы мои варианты сценариев с песочницей на стороне сервера? [закрыто]

11

Я создаю общедоступный веб-сайт, где пользователи обмениваются данными и сценариями для обработки некоторых данных. Сценарии выполняются на сервере в какой-то песочнице без какого-либо другого взаимодействия в этом цикле: моя Perl-программа считывает из базы данных созданный пользователем сценарий, добавляет данные для обработки в сценарий (то есть: документ JSON), затем вызывает интерпретатор, он возвращает ответ (документ в формате JSON или простой текст), я сохраняю его в базе данных с помощью моего perl-скрипта. Скрипт должен иметь возможность доступа к встроенным функциям, добавленным мной к языку сценариев, но не более того.

Итак, я наткнулся на node.js как интерпретатор javascript, и примерно час назад с Google V8 (имеет ли смысл v8 для такого рода вещей?). CoffeeScript также пришёл мне в голову, так как выглядит красиво и всё ещё является Javascript.

Я думаю, что javascript достаточно широко распространен и более «песочничен», поскольку в нем нет вызовов ОС или чего-то небезопасного (я думаю).

Кстати, я пишу систему на Perl и Php для внешнего интерфейса.

Чтобы улучшить вопрос: я выбираю Javascript, потому что я думаю, что он безопасен и достаточно прост для реализации с помощью node.js, но какие еще есть альтернативы для решения такого рода задач? Lua? Python? Я просто не могу найти информацию о том, как правильно запустить интерпретатора в песочнице.

alfa64
источник
Непонятно, о чем ты спрашиваешь. Является ли это возможным? Конечно, это возможно.
Роберт Харви

Ответы:

3

Java содержит встроенный интерпретатор JavaScript. По умолчанию это не песочница, но это может быть включено:

  • установка правильного затвора класса - JavaScript обычно может загружать классы Java. Class shutter - это своего рода менеджер безопасности, который решает, какие классы могут быть загружены, а какие нет.
  • Скрипт «запуска» - короткая инициализация JavaScript, которая удаляет точки доступа к внешней системе: java = undefined;Packages = undefined;org = undefined;

Если вы сделаете это, скрипты, работающие внутри, не должны иметь никакого доступа к внешней среде.

Он также предоставляет функцию ограничения времени ожидания скрипта и количества команд, что полезно для песочницы - вы можете ограничить продолжительность и сложность скрипта.

Я использовал это в Java 7, которая имеет движок Rhino JavaScript. Java 8 имеет более новый, более современный движок Nashorn - я не пробовал его с Nashorn, но я ожидаю, что он должен быть похожим.

QBD
источник
Можете ли вы белый, а не черный список?
Петах
@Petah, вы можете сначала отключить (черный список) все, а затем добавить некоторые специальные функции в виде объекта в песочницу. Это по сути белый список, так что да, вы можете это сделать.
2015 г.
Знание JavaScript достаточно широко, чтобы сделать его хорошим выбором в качестве языка сценариев. Вы можете определить некоторые глобальные и пользовательские вызовы, поскольку вы ограничиваете доступ к вызовам. Подумайте, как браузер определяет windowпеременные для JavaScript, чтобы обеспечить взаимодействие.
Михаил Шопсин
2

моей первой мыслью был node.js - как вы упоминали выше, это интерпретатор javascript. И это как раз то, что вам нужно, если вы хотите поместить скрипты в песочницу действительно безопасным способом.

Другим способом может быть то, что вы проверяете каждую команду в скрипте, если она действительна или нет. Но я не думаю, что вы получите безопасную песочницу.

Приветствую

Tobi
источник
Есть ли какая-нибудь поддержка для песочницы в NodeJS или доступна с NodeJS?
ysdx
4
Нашел это: gf3.github.com/sandbox
ysdx
+1 за отличную ссылку на "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Джек Стоун,
Примечание: песочница gf3 может быть взломана.
Петах