Pular para o conteúdo principal

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, file e table.
  • 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 como true; 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