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,fileytable - 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_requirese establece incondicionalmente entrue. 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