본문으로 건너뛰기

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