PHP5 veya alternatifleri içinde sandbox için öneriler?

2 Cevap php

Ben yavaş yavaş benim önyüz olarak ExtJS kullanarak oyunu gibi webmud çalıştırmak için bir personel proje üzerinde çalışıyoruz. Ben yapılan tasarım tercihlerinden biri oyun mantığı için kullanıcı tarafından oluşturulan değerlendirildi kod izin vermek oldu. Oyuncu devletin komut bir dizi çizgisinde denebilecek bir yeni "oda" girdiğinde Yani "oyuncu daha önce burada olmuştur, onlar burada olmalı, onlar x envanter öğe var" ve sonra buna göre yanıt. Ayrıca temel oda "eylemler" sabit kodlanmış olacaktır (N / S / E / W go) ancak gelişmiş eylemler aynı kullanıcı tarafından oluşturulan değerlendirilen komut olarak kullanılabilir olacaktır.

Aslında ben tembel ve bu mantık açısından değerlendirilmiştir PHP kullanmak için gidiyordu, ama benim paranoyak anlamda tekme edilir Yani bulduk iki alternatif runkit_sandbox ama birincil iplik ve sanal arasındaki nesnelerin bir değişimi desteklemiyor (sadece basit veri türleri ve diziler) VEYA benim oyun mantığı olarak ECMAScript'i kullanarak http://ejohn.org/blog/spicing-up-embedded-javascript/.

Iki pro / eksilerini ECMA tercüman bana seçici javascript çalışma alanı değişkenleri, işlevleri ve muhtemelen nesneleri bağlamak için izin verecek iken runkit, ben hız muazzam bir maliyet oldukça sert komut kilitlemek olduğunu ama onun hala beta durumda ve ben bunu nasıl çalıştığını iyi görmek için henüz ettik.

Bu o seçenekleri için mi yoksa başka bir şey ben daha iyi bir seçim olabilir hakkında bilmiyorum orada mı? Çevre: linux, PHP-CGI 5.3 veya google app motoru olarak.

2 Cevap

Ben kullanıcının katkıda PHP-kodunu değerlendirmek tavsiye etmem - hatta bir runkit sanal içinde. PHP bir çok karmaşık bir dil olduğunu ve yakından çevreye bağlı. Özelliklerini bilmeden, insanların alandan çıkmak için kaldıraç olabilir çok sayıda delik olduğunu tahmin ediyorum.

Javascript daha Katıştırabilirsiniz diğer dilleri vardır. Lua bu tür şeyler için popüler bir seçimdir. Bir php extension in pecl bunun için bağlamaları ile bile var.

Eğer zaten runkit yol gidiyor ediyorsanız, süreçler arasında veri alışverişi için, bu tür memcache gibi bir paylaşılan bellek çözeltisi içine bakmak olabilir.

Bir PHP Sandbox mevcut temel şeyler için vardır. Bu erken aşamalarında ama umut verici görünüyor.

http://www.phpclasses.org/package/7015-PHP-Execute-external-PHP-scripts-in-a-separate-process.html

or from GitHub: https://github.com/fregster/PHPSandbox

Paul