スクリプトを保護し、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
-- 以下がスクリプト本体です