Diferenças do Lua Padrão
O LuaSandbox fornece um ambiente isolado (caixa de areia) que difere em alguns aspectos do Lua 5.1 padrão.
Recursos que não estão disponíveis
-
dofile(), loadfile() e o pacote io, pois eles permitem acesso direto ao sistema de arquivos. Se necessário, o acesso ao sistema de arquivos deve ser feito por meio de funções de retorno PHP.
-
O pacote package, incluindo require() e module(), pois depende muito do acesso direto ao sistema de arquivos. Uma reescrita Lua pura, como a usada na extensão MediaWiki Scribunto, pode ser usada em vez disso.
-
load() e loadstring(), para permitir análise estática do código Lua.
-
print(), já que ele envia para a saída padrão. Se necessário, a saída deve ser feita via funções de retorno PHP.
-
A maior parte do pacote os, pois permite a manipulação do processo e a execução de outros processos.
-
A maior parte do pacote debug, pois permite a manipulação do estado Lua e metadados de maneiras que podem quebrar o isolamento.
-
string.dump(), pois pode expor dados internos.
-
collectgarbage(), gcinfo() e o pacote coroutine não foram revisados quanto à segurança.
Recursos que foram modificados
-
pcall() e xpcall() não conseguem capturar certos erros, particularmente erros de tempo limite.
-
tostring() não inclui endereços de ponteiros.
-
string.match() foi corrigido para limitar a profundidade da recursão e verificar periodicamente se há um tempo limite.
-
math.random() e math.randomseed() foram substituídos por versões que não compartilham estado com rand() do PHP.
-
Os metamétodos __pairs e __ipairs do Lua 5.2 são suportados por pairs() e ipairs().