Как заблокировать вниз (или песочница) встроенный интерпретатор JavaScript JDK для запущения недоверяемых скриптов

мы имеем JAVA-приложение и хотели бы выполнить недоверяемый код с помощью созданного в интерпретаторе JavaScript (javax.script.*)

Однако по умолчанию интерпретатор предоставляет доступ к любому классу Java. Например"java.lang.System.exit(0)"в сценарии завершит работу JVM. Я полагаю, что это называют "Живым Подключением", посмотрите, что "Java Sun Пишет сценарий Руководства Программиста" для получения дополнительной информации.

Я хотел бы так или иначе выключить способность к сценарию для доступа к классам Java, т.е. Я только хочу, чтобы сценарий смог получить доступ к объектам, которые я конкретно ввожу в использовании eval() или put() методы на ScriptEngine.

Я нашел некоторую документацию относительно того, как достигнуть этого с более старой автономной версией интерпретатора (Носорог), например, см. http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/

Однако этот подход не возможен в JDK 1.6, не используя солнце внутренние классы, поскольку ClassShutter и т.д. является всей установкой внутренне и не может быть переопределен с открытыми методами.

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

Вы ожидали бы с частотой бюллетеней безопасности, окружающих JavaScript в различных приложениях, будет простой флаг для отключения Живого Подключения!

7
задан Brett Vasconcellos 27 January 2010 в 23:39
поделиться