выполнить строку lua как код lua

Я хочу поделиться модулями lua с коллегами. Чтобы получить последнюю версию общих модулей, я хочу хранить и получать их с помощью веб-сервера.

Мои вопросы:

Можно ли загрузить код lua непосредственно из http-запроса или строки?

Я хочу добиться чего-то подобного:

module = [[
    local sharedModule = {}
    function sharedModule.greet(name) print("hello " .. name) end  
    return sharedModule
]]
greeter = require (module)
greeter.greet("john")

Возможно, это не правильный поступок. Есть ли лучший подход, чем этот?


person Lionel Briand    schedule 06.06.2017    source источник
comment
Вы ищете load. Тем не менее, я бы посоветовал разместить модуль внутри, и пользователи должны загрузить/установить его соответственно.   -  person hjpotter92    schedule 06.06.2017
comment
@hjpotter92 Спасибо за быстрый ответ. И спасибо за совет. Я настрою проверку безопасности перед доступом к модулям lua   -  person Lionel Briand    schedule 06.06.2017


Ответы (1)


Этому посвящен целый раздел в разделе Программирование на Lua. Ваши потребности будут удовлетворены непосредственно с помощью loadstring.

Однако я бы тщательно проверил код, который вы на самом деле выполняете. По крайней мере, версируйте его (запуск неправильной версии, скорее всего, приведет к всевозможным проблемам, если выполняемый код зависит от того, находится ли среда в определенном состоянии). Оптимально проверяйте контрольную сумму и подписывайте код, а также проверяйте подпись, прежде чем что-либо делать. Если ваша среда не защищена, это, по сути, огромная лазейка.

Вы также можете использовать библиотеку rings, чтобы изолировать код, который вы выполняете внутри самой среды Lua. Это может быть небезопасно с точки зрения безопасности, но должно, по крайней мере, предотвратить сбой вашего приложения полученным кодом, если/когда он пойдет наперекосяк.

person Bartek Banachewicz    schedule 06.06.2017