Отличия от стандартного Lua

LuaSandbox предоставляет изолированную среду, которая в некоторых отношениях отличается от стандартной Lua 5.1.

Функции, которые недоступны

  • dofile(), loadfile() и пакет io, поскольку они разрешают прямой доступ к файловой системе. При необходимости доступ к файловой системе должен осуществляться через callback-функции PHP.

  • Пакет package, включая require() и module(), так как он сильно зависит от прямого доступа к файловой системе. Вместо него можно использовать перезапись на чистом Lua, такую как та, что используется в модуле MediaWiki Scribunto.

  • load() и loadstring(), для статического анализа кода Lua.

  • print(), поскольку функция выводит в стандартный вывод. При необходимости вывод должен выполняться через callback-функции PHP.

  • Большая часть пакета os, поскольку он позволяет управлять процессом и выполнять другие процессы.

    • os.clock(), os.date(), os.difftime() и os.time() остаются доступными.

  • Большая часть пакета debug, поскольку он позволяет манипулировать состоянием Lua и метаданными способами, которые могут нарушить песочницу.

    • debug.traceback() остается доступным.

  • string.dump(), так как это может раскрыть внутренние данные.

  • collectgarbage(), gcinfo() и пакет coroutine не были проверены на безопасность.

Измененные функции

  • pcall() и xpcall() не может отловить определенные ошибки, особенно ошибки времени ожидания.

  • tostring() не включает адреса указателей.

  • string.match() была исправлена для ограничения глубины рекурсии и периодической проверки времени ожидания.

  • math.random() и math.randomseed() заменяются версиями, которые не разделяют состояние с функцией PHP rand().

  • Метаметоды __pairs и __ipairs Lua 5.2 поддерживаются с помощью pairs() и ipairs().