Песочница Java / Groovy / Freemarker Code - предотвращение выполнения определенных методов - PullRequest
5 голосов
/ 08 апреля 2009

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

Я могу обеспечить определенный уровень безопасности на очень высоком уровне с помощью инфраструктуры безопасности Java по умолчанию - то есть запретить доступ к коду к файловой системе или сети, однако мне нужно ограничить доступ к определенным методам.

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

Все, что мне по сути нужно, - это предотвращать выполнение определенных методов при вызове из Groovy или Freemarker. Я рассмотрел хак, который посмотрел бы на стек вызовов, но это был бы огромный удар по скорости (и он довольно грязный).

У кого-нибудь есть другие идеи для реализации этого?

Ответы [ 4 ]

5 голосов
/ 09 апреля 2009

Вы можете сделать это, создав подкласс GroovyClassLoader и применив свои ограничения в AST Visitor. Этот пост объясняет, как это сделать: http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html

Кроме того, указанный код находится в папке с примерами установщика Groovy 1.6.

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

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

2 голосов
/ 08 апреля 2009

OSGi отлично подходит для этого. Вы можете разбить свой код на пакеты и установить, что именно представляет каждый пакет и какие другие пакеты. Будет ли это работать для вас?

1 голос
/ 31 мая 2013

Вы также можете рассмотреть java-песочницу (http://blog.datenwerke.net/p/the-java-sandbox.html), недавно разработанную библиотеку, которая позволяет безопасно выполнять ненадежный код изнутри java.

Также см .: http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html

...