Отличия от стандартного 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().