跳至主要內容

保護腳本,正確接受 require


為何 require 可能帶來安全風險?

  • XXTouch 加密的腳本模組可被其它腳本或模組以 require 方式引用
  • 當加密腳本被 require 時,全域環境是不可信的,腳本呼叫的函式可能已被替換

如何正確使用 require 呢?

  • XXTouch 保證部分模組的函式會在被 require 之前恢復初始狀態,包括 osiostringdevicehttpfiletable 模組的所有函式
  • 可通過深拷貝全域環境到模組內局部環境來確保安全呼叫上述模組中的函式,例如:
    -- 在腳本的最前面加上這個代碼
    local _ENV = table.deep_copy(_ENV)
    -- 下面就是腳本的主體內容
    --
    -- 最後您可能還需要返回一些導出函數或者常量
  • 當一個模組被 require 方式引用時,全域變數 been_require 會無條件置為 true,可通過該變數判斷目前腳本是否正在被 require,例如:
    -- 在腳本的最前面加上這個代碼
    if been_require then
    return -- 如果被 require 就直接退出
    end
    -- 下面就是腳本的主體內容