2008-10-27 2 views
1

필자는 천천히 프론트 엔드로 extjs를 사용하는 게임과 같은 webmud를 실행하기 위해 인력 프로젝트를 수행했습니다. 내가 선택한 디자인 중 하나는 사용자가 생성 한 게임 로직에 대한 평가 코드를 허용하는 것입니다. 그래서 플레이어가 새로운 "방"에 입장 할 때 많은 수의 상태 스크립트가 "이전에 여기에 있었는지 플레이어가 여기 있습니까? x 개의 인벤토리 아이템을 가지고 있습니까?"라는 라인을 따라 호출 한 다음 이에 따라 응답합니다. 또한 기본 작업 "작업"은 하드 코드 (N/S/E/W로 이동)되지만 고급 작업은 동일한 사용자 생성 평가 스크립트로 사용할 수 있습니다.PHP5 또는 대안 내에서 샌드 박싱을위한 권장 사항은 무엇입니까?

원래 나는 게으르므로이 논리에 대해 PHP를 평가했지만 내 편집증 감각이 발휘되고 있습니다. 그래서 내가 찾은 두 가지 대안은 runkit_sandbox이지만 주 노드 사이의 객체 교환을 지원하지 않습니다 스레드 및 샌드 박스 (간단한 데이터 형식 및 배열) 또는 ecmascript를 내 게임 논리로 사용 http://ejohn.org/blog/spicing-up-embedded-javascript/.

두 가지 장점/단점은 runkit을 사용하면 속도를 높이기 위해 엄청난 비용이 들지만 스크립트를 잠글 수 있다는 것입니다. 반면에 ecma 인터프리터는 변수, 함수 및 가능한 객체를 javascript에 선택적으로 바인딩 할 수 있습니다 아직 베타 상태에 있지만 아직 실행 방법을 잘 알지 못했습니다.

옵션을위한 것입니까? 아니면 거기에 더 좋은 선택이 될 수 있는지 모르겠습니다. 환경 : linux, PHP-CGI 5.3 또는 Google 응용 프로그램 엔진.

+0

. PHPParser 라이브러리를 사용하여 샌드 박스 코드를 분석하고 사용자가 구성 할 수있는 화이트리스트 및 블랙리스트와 비교하여 확인하며 정상적인 기본 설정과 함께 다양한 구성 옵션을 제공합니다. 이 프로젝트에는 샌드 박스 설정을 실험하는 데 사용할 수있는 샌드 박스 툴킷 (로컬 컴퓨터에서만 사용)과 전체 설명서 및 API 설명서가 포함되어 있습니다. https://github.com/fieryprophet/php-sandbox –

답변

4

runkit 샌드 박스 내에서도 사용자가 제공 한 PHP 코드를 평가하지 않는 것이 좋습니다. PHP는 매우 복잡한 언어이며 환경과 밀접하게 관련되어 있습니다. 세부 사항을 모른 채 사람들이 모래 상자에서 탈출 할 수있는 수많은 구멍이있을 것으로 예상됩니다.

자바 스크립트보다 다른 언어가 포함될 수 있습니다. Lua은 이러한 종류의 것들에 대한 대중적인 선택입니다. php extension in pecl도 바인딩되어 있습니다.

어쨌든 runkit 경로를 사용한다면 프로세스간에 데이터를 교환하기 위해 memcache과 같은 공유 메모리 솔루션을 살펴볼 수 있습니다.

+0

루아 (lua)에 대해서도 생각조차하지 않았으며, 지금까지 얼마나 멀리 있는지 볼 수 있도록 pecl 패키지를 확인했습니다. – David

+0

불행히도 lua pecl 패키지는 꽤 거친 것처럼 보입니다. 릴리즈가 없었으며 CVS 레포의 마지막 변경은 6 개월 전이었습니다. – David

+0

OK - 그 사실을 몰랐습니다. 나는 이것이 당신을 위해 현실적인지는 모르겠지만, 당신은 자신의 꼬임을 다듬어 볼 수도 있습니다. Lua는 C 코드 (PHP 확장 기능)에 쉽게 포함될 수있는 것으로 유명하기 때문에 너무 어렵지 않아야합니다. – troelskn

관련 문제