스크립트를 보호하고 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
-- 아래부터 스크립트의 본문입니다