Отличия от стандартного Lua
LuaSandbox предоставляет изолированную среду, которая в некоторых отношениях отличается от стандартной Lua 5.1.
Функции, которые недоступны
-
dofile()
, loadfile()
и пакет io
, поскольку они разрешают прямой доступ к файловой системе.
При необходимости доступ к файловой системе должен осуществляться через callback-функции PHP.
-
Пакет package
, включая require()
и module()
, так как он сильно зависит от прямого доступа к файловой системе.
Вместо него можно использовать перезапись на чистом Lua, такую как та, что используется в модуле MediaWiki Scribunto.
-
load()
и loadstring()
, для статического анализа кода Lua.
-
print()
, поскольку функция выводит в стандартный вывод. При необходимости вывод должен выполняться через callback-функции PHP.
-
Большая часть пакета os
, поскольку он позволяет управлять процессом и выполнять другие процессы.
-
Большая часть пакета debug
, поскольку он позволяет манипулировать состоянием Lua и метаданными способами, которые могут нарушить песочницу.
-
string.dump()
, так как это может раскрыть внутренние данные.
-
collectgarbage()
, gcinfo()
и пакет coroutine
не были проверены на безопасность.
Измененные функции
-
pcall()
и xpcall()
не может отловить определенные ошибки, особенно ошибки времени ожидания.
-
tostring()
не включает адреса указателей.
-
string.match()
была исправлена для ограничения глубины рекурсии и периодической проверки времени ожидания.
-
math.random()
и math.randomseed()
заменяются версиями, которые не разделяют состояние с функцией PHP rand()
.
-
Метаметоды __pairs
и __ipairs
Lua 5.2 поддерживаются с помощью pairs()
и ipairs()
.