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()
.