Подтвердить что ты не робот

Пуленепробиваемый groovy script встраивание

Я работаю над серверным приложением, которое может быть расширено с помощью пользовательских сценариев Groovy. Очевидно, что я хочу, чтобы эти сценарии выполнялись в очень сложной изолированной программной среде, где они не могут разрушить код основного приложения или потреблять слишком много ресурсов для перегрузки сервера.

Я изучил различные возможности, и окончательное решение может быть их комбинацией:

  • Запустите script в очень ограниченном диспетчере безопасности. script запускается без разрешения SecurityManager. Должны быть объявлены дополнительные разрешения (например, Android).

  • Запустить новую JVM. Создайте обертку ScriptProcess вокруг Runtime.exec и создайте новую JVM с менеджером безопасности, ограниченной кучей и т.д. Поскольку мы запускаем полномасштабный процесс, мы можем получить больше контроля над плохой работой монитора? Стоимость ресурса была бы ужасной, хотя... Альтернативой было бы использовать Ant здесь, но будет ли она масштабируемой?

  • API Java Monitor. В Java 6 есть пакет с возможностью мониторинга. Мы могли контролировать потоки и, возможно, обнаруживать бесконечные циклы и потребление памяти. Кто-нибудь использовал это?

Вот что я имею в виду сегодня. Каким будет лучший способ убедиться, что эти сценарии ведут себя правильно и все еще сохраняют определенную масштабируемость и производительность?

4b9b3361

Ответ 1

Дополнительная возможность заключается в настройке компиляции Groovy 1.8 на GroovyShell, которая запускает встроенные скрипты. Вы можете предварительно импортировать классы и методы, ограничить использование Groovy AST и предварительно применить трансформацию AST, такую ​​как @ThreadInterrupt, @TimedInterrupt или @ConditionalInterrupt. Подробности по адресу:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

Ответ 2

Вам следует взглянуть на проект groovy-sandbox от kohsuke. Также посмотрите на его сообщение в блоге здесь на эту тему, и что такое решение: песочница, но недостаток производительности.