Differences from Standard Lua
LuaSandbox provides a sandboxed environment which differs in some ways from standard Lua 5.1.
Features that are not available
dofile()
, loadfile()
, and the io
package, as they allow direct filesystem access. If needed, filesystem access should be done via PHP callbacks.
- The
package
package, including require()
and module()
, as it depends heavily on direct filesystem access. A pure-Lua rewrite such as that used in the MediaWiki Scribunto extension may be used instead.
load()
and loadstring()
, to allow for static analysis of Lua code.
print()
, since it outputs to standard output. If needed, output should be done via PHP callbacks.
- Most of the
os
package, as it allows manipulation of the process and executing of other processes.
os.clock()
, os.date()
, os.difftime()
, and os.time()
remain available.
- Most of the
debug
package, as it allows manipulation of Lua state and metadata in ways that can break sandboxing.
debug.traceback()
remains available.
string.dump()
, as it may expose internal data.
collectgarbage()
, gcinfo()
, and the coroutine
package have not been reviewed for security.
Features that have been modified
pcall()
and xpcall()
cannot catch certain errors, particularly timeout errors.
tostring()
does not include pointer addresses.
string.match()
has been patched to limit the recursion depth and to periodically check for a timeout.
math.random()
and math.randomseed()
are replaced with versions that don't share state with PHP's rand()
.
- The Lua 5.2
__pairs
and __ipairs
metamethods are supported by pairs()
and ipairs()
.