Відмінності від стандартного 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()замінюються версіями, які не поділяють стан із функцією PHPrand()

  • Метаметоди__pairsи__ipairsLua 5.2 підтримуються за допомогоюpairs()иipairs()