Я пытаюсь обезопасить 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 справиться с этим сам.
Извините, если это не объясняется должным образом.