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()
에서 지원됩니다.