Пуленепробиваемое встраивание скриптов - PullRequest
12 голосов
/ 02 июня 2011

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

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 02 июня 2011

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

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

2 голосов
/ 22 мая 2012

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

0 голосов
/ 14 июня 2013

Также взгляните на проект java-sandbox и сопровождающее его сообщение в блоге http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...