Aller au contenu principal

Protéger les scripts et accepter correctement require


Pourquoi require peut-il présenter un risque de sécurité ?

  • Les modules de script chiffrés de XXTouch peuvent être référencés par d’autres scripts ou modules au moyen de require
  • Lorsqu’un script chiffré est appelé par require, l’environnement global n’est pas fiable et les fonctions appelées par le script peuvent avoir été remplacées

Comment utiliser require correctement ?

  • XXTouch garantit que les fonctions de certains modules sont restaurées à leur état initial avant l’appel de require, notamment toutes les fonctions des modules os, io, string, device, http, file et table
  • Pour garantir un appel sûr des fonctions de ces modules, vous pouvez effectuer une copie profonde de l’environnement global dans un environnement local du module, par exemple :
    -- Ajouter ce code au tout début du script
    local _ENV = table.deep_copy(_ENV)
    -- Corps principal du script
    --
    -- Vous devrez peut-être finalement renvoyer des fonctions ou constantes exportées
  • Lorsqu’un module est appelé au moyen de require, la variable globale been_require est inconditionnellement définie sur true. Cette variable permet de déterminer si le script actuel est appelé par require, par exemple :
    -- Ajouter ce code au tout début du script
    if been_require then
    return -- Quitter directement si le script est appelé par require
    end
    -- Corps principal du script