Ответ 1
Взгляните на Groovy Песочницу. Вы можете использовать его, чтобы остановить такие вещи, как System.exit(0)
или new File("/etc/passwd")
.
Мы пытаемся предоставить элементы сценария в "предприимчивом" продукте. Мы хотели бы использовать groovy, но у нас возникают трудности с обеспечением очень простых вещей.
Например, мы хотели бы, чтобы клиент просто не переходил
Class.forName("my.company.internal.SecruityTools").runAsAwesome(...)
Мы установили менеджера безопасности с политикой, которая разрешает только accesDeclaredMembers
и перезаписала метод checkPackageAccess
и разрешает только белые пакеты. К сожалению, цепочка класса classLoader по умолчанию просто обходит это и загружает класс каким-либо образом.
Казалось бы, это довольно распространенная/обсуждаемая проблема, но я не могу на всю жизнь найти библиотеку или даже хорошее сообщение в блоге о том, как блокировать ненадежные скрипты в контексте гораздо большего приложения.
Кто-нибудь сделал это успешно? Я пропустил некоторые довольно очевидные должности/концепции? Есть ли для этого сплошная библиотека? Может быть, Groovy.tinFoilHatMode(true)
?
Взгляните на Groovy Песочницу. Вы можете использовать его, чтобы остановить такие вещи, как System.exit(0)
или new File("/etc/passwd")
.
Посмотрите java-sandbox. Существует также учебник по использованию его с groovy: http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html
Вы посмотрели на использование GroovyCodeSource
То, что мы закончили, было комбинацией вещей выше, но настоящий волшебный соус реализовывал этот трансформатор AST, который завернул любое выражение ( включая this
или неявный this
) в проверке доступа.