Untrusted Groovy Script Безопасность в Java

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

Например, мы хотели бы, чтобы клиент просто не переходил

Class.forName("my.company.internal.SecruityTools").runAsAwesome(...)

Мы установили менеджера безопасности с политикой, которая разрешает только accesDeclaredMembers и перезаписала метод checkPackageAccess и разрешает только белые пакеты. К сожалению, цепочка класса classLoader по умолчанию просто обходит это и загружает класс каким-либо образом.

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

Кто-нибудь сделал это успешно? Я пропустил некоторые довольно очевидные должности/концепции? Есть ли для этого сплошная библиотека? Может быть, Groovy.tinFoilHatMode(true)?

Ответы

Ответ 1

Взгляните на Groovy Песочницу. Вы можете использовать его, чтобы остановить такие вещи, как System.exit(0) или new File("/etc/passwd").

Ответ 3

Вы посмотрели на использование GroovyCodeSource

Ответ 4

То, что мы закончили, было комбинацией вещей выше, но настоящий волшебный соус реализовывал этот трансформатор AST, который завернул любое выражение ( включая this или неявный this) в проверке доступа.