как сделать файл конфигурации lua безопасным - PullRequest
1 голос
/ 26 марта 2012

Я новичок в Lua и хочу спросить, можно ли ограничить синтаксис lua в конфигурационном файле? Я знаю, что загрузка конфигурации должна выполняться в тюрьме, но как мы можем справиться с while 1 do end в файле конфигурации, который мы хотим загрузить? Есть ли способ разрешить в конфигурации только строки, назначения и таблицы, и если нет, то как лучше всего проверить, что файл lua не содержит нежелательных конструкций? Является ли ручной предварительный анализ единственным решением?

Ответы [ 2 ]

7 голосов
/ 27 марта 2012

Вы, кажется, уже знаете о "песочнице" в Lua. Так что остается, как вы говорите, вредоносные конструкции, такие как бесконечные циклы. И чтобы решить это, вам нужно решить проблему остановки. Что не практично.

Вместо "ручного" анализа и надежды на то, что вы найдете весь вредоносный контент (вы этого не сделаете), как насчет того, чтобы просто запустить интерпретатор Lua с установленным таймером, чтобы сценарий был прерван, если это займет больше N секунд?

0 голосов
/ 27 марта 2012

Если вы хотите явно запретить определенные конструкции в Lua, вы должны на самом деле сканировать файл самостоятельно.Обратите внимание, что эти конструкции допустимы, даже в конфигурационных файлах, поэтому вы ограничиваете возможности пользователя.

Не составит труда написать простой лексер Lua, который игнорирует содержимое строк.и комментарии, но ошибки по любому из ключевых слов Lua, кроме return.При правильной песочнице (то есть: нет доступных функций для вызова), этого должно быть достаточно, чтобы отсеять что-либо вредоносное.

Кроме того, обратите внимание, что Lua 5.1 не позволяет предотвратить синтаксический анализ-текстовые данные (то есть: скомпилированный байт-код Lua).5.2 предлагает особую поддержку API для принуждения загрузчика распознавать только текст и, следовательно, отклонять байт-код.

...