跳到主要内容

保护脚本,正确接受 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
    -- 下面就是脚本的主体内容