Saltar al contenido principal

Proteger scripts y aceptar require correctamente


¿Por qué require puede suponer un riesgo de seguridad?

  • Los módulos de script cifrados de XXTouch pueden ser importados por otros scripts o módulos mediante require
  • Cuando un script cifrado se importa mediante require, el entorno global no es confiable y las funciones que llama el script pueden haber sido sustituidas

¿Cómo se debe usar require correctamente?

  • XXTouch garantiza que las funciones de algunos módulos se restauran a su estado inicial antes de ser importadas mediante require, incluidas todas las funciones de los módulos os, io, string, device, http, file y table
  • Para garantizar llamadas seguras a las funciones de los módulos anteriores, puedes hacer una copia profunda del entorno global en un entorno local del módulo, por ejemplo:
    -- añadir este código al principio del script
    local _ENV = table.deep_copy(_ENV)
    -- a continuación va el contenido principal del script
    --
    -- al final quizá también necesites devolver algunas funciones o constantes exportadas
  • Cuando un módulo se importa mediante require, la variable global been_require se establece incondicionalmente en true. Puedes usarla para determinar si el script actual está siendo importado mediante require, por ejemplo:
    -- añadir este código al principio del script
    if been_require then
    return -- salir directamente si se importa mediante require
    end
    -- a continuación va el contenido principal del script