Перейти к основному содержимому

Безопасность

Проверяйте скрипты перед загрузкой

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 и модель исполнения могут изменяться без обратной совместимости.