LuaSandbox 표준 루아와의 차이점

LuaSandbox는 표준 Lua 5.1과 몇 가지 면에서 다른 샌드박스 환경을 제공합니다.


사용할 수 없는 기능

  • dofile(), loadfile()io 패키지는 직접 파일 시스템 액세스를 허용합니다. 필요한 경우 PHP 콜백을 통해 파일 시스템 액세스를 수행해야 합니다.
  • require()module()을 포함한 package 패키지는 직접적인 파일 시스템 액세스에 크게 의존합니다. MediaWiki Scribunto 확장에서 사용되는 것과 같은 순수 Lua 재작성을 대신 사용할 수 있습니다.
  • load()loadstring(), Lua 코드의 정적 분석을 허용합니다.
  • print(), 표준 출력으로 출력하기 때문입니다. 필요한 경우 PHP 콜백을 통해 출력해야 합니다.
  • 대부분의 os 패키지는 프로세스를 조작하고 다른 프로세스를 실행할 수 있습니다.
    • os.clock(), os.date(), os.difftime()os.time()은 계속 사용할 수 있습니다.
  • 대부분의 debug 패키지는 샌드박싱을 깨뜨릴 수 있는 방식으로 Lua 상태 및 메타데이터를 조작할 수 있습니다.
    • debug.traceback()은 계속 사용할 수 있습니다.
  • string.dump(), 내부 데이터를 노출할 수 있습니다.
  • collectgarbage(), gcinfo()coroutine 패키지는 보안을 위해 검토되지 않았습니다.

수정된 기능

  • pcall()xpcall()은 특정 오류, 특히 시간 초과 오류를 catch할 수 없습니다.
  • tostring()은 포인터 주소를 포함하지 않습니다.
  • string.match()는 재귀 깊이를 제한하고 주기적으로 시간 초과를 확인하기 위해 패치되었습니다.

  • math.random()math.randomseed()는 PHP의 rand()와 상태를 공유하지 않는 버전으로 대체됩니다.
  • Lua 5.2 __pairs__ipairs 메타메소드는 pairs()ipairs()에서 지원됩니다.