У меня сложилось впечатление, что вы хотите создать песочницу Lua, в которой выполняются сценарии Lua.Управляя средой «песочницы», вы можете ограничить возможности скриптов.
В Stackoverflow существует ряд похожих вопросов.
Тогда у Mozilla есть github, который вы можете найти полезным. Lua Sandbox Library .
Похоже, что произошло изменение с Lua 5.1 на Lua 5.2, из-за которого некоторые старые методы песочницы не работали так хорошо.Вот описание подходов для Lua 5.1, Песочницы , но используемая функция, setfenv()
больше не доступна в Lua 5.2.
Существует также Safe Lua это может быть полезно.
В этой статье «Песочница» Lua из C упоминается выбор библиотек для загрузки по одной за раз для создания определенной рабочей среды.
Вот как реализована предложенная квази-песочница: обычно после создания нового состояния Lua хост-код должен вызывать функцию luaL_openlibs () для загрузки стандартных библиотек, предоставляемых языком Lua, однако это вызовет многие функции, которые могут быть нежелательны в некоторых случаях.ситуации.Поэтому эта песочница загружает каждую библиотеку индивидуально, вызывая luaL_requiref (), и использует тот факт, что эта функция оставляет таблицу загруженных функций в верхней части стека Lua.Нежелательные функции затем не определяются, давая им значение nil, ...
Однако есть также предупреждение об этом подходе, неизвестные зависимости, которые вызывают ошибки во время выполнения.
Необходимо сделать несколько заключительных замечаний относительно предложенного решения: неясно, будет ли интерпретатор Lua сохранять полную функциональность во всех аспектах за пределами нежелательной функциональности, когда загружается только подмножество стандартных библиотек, однако это хорошо сработало для моего решения.В любом случае рекомендуется провести некоторое тестирование.Это связано с тем фактом, что некоторые, казалось бы, основные функциональные возможности языка (например, ipairs ()) фактически предоставляются базовой библиотекой.
Наилучший подход заключается в блокировке сценариев, чтобыВы можете запускать их как надежный сценарий даже при использовании методов песочницы.