Язык сценариев в песочнице для JVM? - PullRequest
0 голосов
/ 25 сентября 2018

Я хотел бы предложить нашим пользователям возможность писать сценарии на стороне сервера.(Наше приложение ориентировано на разработчиков).Я бы хотел, чтобы они могли вызывать несколько функций в нашем приложении, создавать переменные и выполнять основные циклы и переходы.Однако я хочу, чтобы их сценарии были помещены в «песочницу», чтобы они не могли разорваться и записать на диск или открыть сетевое соединение или испортить внутреннюю часть нашего приложения.Думайте об этом как о хранимой процедуре SQL: вы можете взаимодействовать с сервером, но не с внешним миром.

Существуют ли какие-либо предварительно созданные языки сценариев для JVM, которые будут это делать?Я мог бы написать свой собственный DSL, но это большая работа.

Несколько лет назад я начал что-то подобное, используя Rhino, но оказалось, что я не могу правильно поставить его в песочницу.Был бы счастлив использовать GraalJS, но я не могу сказать, если это песочница.Существует некоторая ссылка на остановку вредоносного кода (https://www.graalvm.org/docs/graalvm-as-a-platform/embed/#reliable-timeouts-for-malicious-code),, но похоже, что JS-скрипт может по-прежнему получать доступ ко всем видам вещей в хост-приложении.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

From: https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/Context.html

Каждый контекст по умолчанию изолирован от всех других экземпляров в отношении семантики оценки языка и потребления ресурсов.По умолчанию новый экземпляр контекста не имеет доступа к ресурсам хоста, таким как потоки, файлы или загрузка новых классов хоста.Чтобы разрешить доступ к таким ресурсам, либо должно быть предоставлено отдельное право доступа, либо для всего доступа должно быть установлено значение true.

Короче говоря: GraalJS, встроенный через PolyglotAPI, не может получить доступ к каким-либо собственным ресурсам, если это явно не разрешено.

0 голосов
/ 25 сентября 2018

Вам, вероятно, следует запустить внешний процесс, поскольку даже логика в песочнице времени выполнения все еще может предпринимать попытки исчерпания ресурсов (нехватка памяти, переполнение стека, бесперебойные циклы и т. Д.).И как только вы это сделаете, вы можете положиться на средства безопасности своей операционной системы, например, seccomp и пространства имен в linux.

...