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