Безопасность
Proxy-only sandbox закрывает прямой доступ к JVM и процессу сервера, но текущая alpha-версия ещё не применяет operator-granted capabilities ко всем игровым операциям. Загруженный Script может использовать доступные Host Objects и устаревшие команды с их текущими полномочиями.
Обычные GraalJS и GraalPython Context запрещают Host/Polyglot access, поиск и загрузку Java-классов, reflection, native access, процессы, потоки, environment, sockets и unrestricted IO. Скриптам доступны только QuestScript Host Objects, публичные фасады и разрешённые неизменяемые значения.
Файловый Script может читать Language Imports только из канонического
config/questscript/scripts; запись, выход за корень и symlink escape запрещены.
До появления Script Bundles этот корень общий для всех файловых Scripts, поэтому
он не является границей между отдельными пакетами. Inline Scripts, включая
/qs eval, не получают файлового доступа. Unrestricted Polyglot bindings также
недоступны; cross-Script вызовы публикуются только через script.export.
Sandbox ограничивает доступ к host-процессу, но не заменяет игровую авторизацию.
Capability grants для команд и World Mutation ещё не завершены, устаревший
minecraft API остаётся доступен, а полный аудит достижимости native-значений
продолжается. Поэтому текущую alpha-версию не следует считать границей для
враждебного кода.
Практические правила:
- не загружайте файлы от игроков, из чата, HTTP-запросов или непроверенных пакетов;
- ограничьте доступ к каталогу
config/questscript/scripts/; - выдавайте операторские права только доверенным администраторам;
- проверяйте исходный код и зависимости скрипта перед загрузкой;
- учитывайте, какие игровые Host Objects и устаревшие команды доступны скрипту.
QuestScript находится в alpha, поэтому публичные API и модель исполнения могут изменяться без обратной совместимости.