LUA 5.2: Загрузить / Требовать / et c - Ограничить его указанием c каталогов, которые могут быть загружены - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь обезопасить LUA в своей игре (игроки могут создавать сценарии в LUA). Я удалил много функций для создания своего рода песочницы (например, AKA удаляет функцию os.execute). Однако моя игра использует загрузку скриптов из других мест, чтобы сделать кодирование менее избыточным. Ака:

require("Scripts/Additional/Crafting") вверху файла.

Для меня это нормально, но я не знаю последствий оставления require / load / file.read () без ограничений, как есть, или, если возможно, переопределить его, чтобы они не могли загрузить или читать файл извне сервера.

Сейчас я использую N LUA (C#) с LUA5.2. Я удаляю функции, когда создаю состояние LUA.

Что я хотел бы сделать, так это сохранить LOAD / REQUIRE / et c, но переопределить его с начальной проверкой перед рукой, чтобы убедиться, что они находятся в каталоге SCRIPT. Сама новая функция не будет редактируемой (так как я жестко закодирую ее в C# с N LUA или создам отдельный файл, который находится за пределами папки, к которой у них нет доступа).

В качестве альтернативы, Я могу выполнить быструю проверку скрипта через C# для этих функций и проверить каталоги, которые они используют с помощью REGEX, но мне было интересно, может ли LUA справиться с этим сам.

Извините, если это не объясняется должным образом.

1 Ответ

0 голосов
/ 21 февраля 2020

Lua> = 5.2 имеет функциональную среду _ENV, полезную для среды песочницы, как в вашем случае. См http://lua-users.org/wiki/EnvironmentsTutorial

...