Lua: как заблокировать библиотеку io путем внесения строк в черный список?и дилемма песочницы - PullRequest
1 голос
/ 27 сентября 2019

Я хочу заблокировать библиотеку io, чтобы сценарии, созданные сообществом, не имели к ней доступа.

Я мог бы просто создать состояние Lua без него, но вот дилемма: сценарии сообщества по-прежнему должны быть в состояниииспользовать библиотеку io, вызывая loadfile () для библиотек, созданных командой разработчиков, которые обернули в них функции io.

Я не нашел способа добиться этой двойственности, блокируя функции / библиотеки из сценариев сообщества, в то же время позволяяуказанные сценарии для запуска нарушающих функций / библиотек, если они помещены (для целей очистки) в другую поддерживаемую dev-библиотеку, которую сценарии сообщества можно загрузить с помощью loadfile ().Я прибегаю к уродливому методу внесения в черный список определенных строк, поэтому, если они есть в скрипте, он не запускается.Кстати, черный список проверяется со стороны C ++, где сценарий для запуска является строковой переменной, которая подается на виртуальную машину, если она чистая.

Если я черный список ...

"_G", "io.", "io .", "io}", "io }", "io  ", "=io", "= io", "{io", "{ io", ",io", ", io", "  io"

... можно ли по-прежнему вызывать библиотечные функции io, или у меня есть все?Причина, по которой блокировка _G является обязательной, заключается в следующем:

a = "i"
b = "o"
boom = _G[a..b]

Я хочу знать, возможен ли другой «взлом».Кроме того, я приветствую альтернативы того, как я могу достичь вышеупомянутой двойственности без черных списков.

1 Ответ

0 голосов
/ 27 сентября 2019

Напишите свою собственную функцию loadfile, которая будет проверять расположение загруженных файлов (предположительно, все поддерживаемые dev-библиотеки имеют определенное расположение) и добавляет библиотеку io в среду, доступную для загруженных сценариев (используя * 1003).* параметр в Lua 5.2+).Сама песочница не будет иметь доступа к библиотеке io, но библиотеки dev будут иметь.

...