Перейти к основному содержимому

Защита скрипта и корректная обработка require


Почему require может быть небезопасен?

  • Зашифрованный модуль скрипта XXTouch может быть подключён другим скриптом или модулем через require.
  • При подключении зашифрованного скрипта через require глобальная среда ненадёжна, и вызываемые скриптом функции могли быть заменены.

Как правильно использовать require?

  • XXTouch гарантирует восстановление исходного состояния функций некоторых модулей до вызова require, включая все функции модулей os, io, string, device, http, file и table.
  • Чтобы безопасно вызывать функции перечисленных модулей, можно глубоко скопировать глобальную среду в локальную среду модуля, например:
    -- Добавьте этот код в самое начало скрипта.
    local _ENV = table.deep_copy(_ENV)
    -- Ниже располагается основное содержимое скрипта.
    --
    -- В конце может потребоваться вернуть экспортируемые функции или константы.
  • Когда модуль подключается через require, глобальная переменная been_require безусловно устанавливается в true; по ней можно определить, подключается ли текущий скрипт через require, например:
    -- Добавьте этот код в самое начало скрипта.
    if been_require then
    return -- Немедленно завершает выполнение при подключении через require.
    end
    -- Ниже располагается основное содержимое скрипта.