Proteger scripts e aceitar require corretamente
Por que require pode trazer riscos de segurança?
- Módulos de script criptografados pelo XXTouch podem ser importados por outros scripts ou módulos usando require.
- Quando um script criptografado é carregado por require, o ambiente global não é confiável e as funções chamadas pelo script podem ter sido substituídas.
Como usar require corretamente?
- O XXTouch garante que as funções de alguns módulos sejam restauradas ao estado inicial antes de serem usadas por require, incluindo todas as funções dos módulos
os,io,string,device,http,fileetable. - Para garantir chamadas seguras às funções dos módulos acima, faça uma cópia profunda do ambiente global para um ambiente local dentro do módulo, por exemplo:
-- adicione este código no início do script
local _ENV = table.deep_copy(_ENV)
-- este é o corpo principal do script
--
-- por fim, talvez você também precise retornar algumas funções ou constantes exportadas - Quando um módulo é importado usando require, a variável global
been_requireé definida incondicionalmente comotrue; use essa variável para verificar se o script atual está sendo carregado por require, por exemplo:-- adicione este código no início do script
if been_require then
return -- sai diretamente se estiver sendo carregado por require
end
-- este é o corpo principal do script