Différences avec Lua standard
LuaSandbox fournit un environnement sécurisé qui diffère de certaines manières de Lua 5.1 standard.
Fonctionnalités non disponibles
-
Les packages dofile()
, loadfile()
, et io
, car ils permettent un accès direct au système de fichiers. Si nécessaire, l'accès au système de fichiers doit être effectué via des fonctions de rappels PHP.
-
Le package package
, y compris require()
et module()
, car il dépend fortement de l'accès direct au système de fichiers. Une réécriture pure Lua telle que celle utilisée dans l'extension MediaWiki Scribunto peut être utilisée à la place.
-
load()
et loadstring()
, pour permettre l'analyse statique du code Lua.
-
print()
, depuis qu'il écrit sur la sortie standard. Si nécessaire, la sortie doit être effectuée via des fonction de rappels PHP.
-
La plupart du package os
, car il permet la manipulation du processus et l'exécution d'autres processus.
-
La plupart du package debug
, car il permet la manipulation de l'état Lua et des métadonnées de manière à pouvoir casser l'isolation.
-
string.dump()
, car il peut exposer des données internes.
-
Le package collectgarbage()
, gcinfo()
, et coroutine
n'ont pas été examinés pour la sécurité.
Features that have been modified
-
pcall()
et xpcall()
ne peuvent pas attraper certaines erreurs, en particulier les erreurs de délai d'attente.
-
tostring()
n'inclut pas les adresses de pointeur.
-
string.match()
a été patché pour limiter la profondeur de récursion et pour vérifier périodiquement un délai d'attente.
-
math.random()
et math.randomseed()
sont remplacés par des versions qui ne partagent pas l'état avec rand()
de PHP.
-
Les méta méthodes de Lua 5.2 __pairs
et __ipairs
sont supportées par pairs()
et ipairs()
.