我一直在慢慢开展人事项目,使用extjs作为我的前端来运行类似于游戏的webmud。我做的一个设计选择是允许用户生成的游戏逻辑评估代码。因此,当玩家进入新的“房间”时,许多状态脚本将被称为“玩家曾经在这里,如果他们在这里,他们有x库存项目”吗?然后做出相应的回应。此外,基本房间“动作”将进行硬编码(转N / S / E / W),但高级操作将作为相同的用户生成的评估脚本提供。

最初我本来就是懒惰并且使用评估的PHP来实现这个逻辑,但是我的偏执感正在激发。所以我找到的两个替代方案是runkit_sandbox,但它不支持主线程之间的对象交换和沙箱(只是简单的数据类型和数组)或使用ecmascript作为我的游戏逻辑 http ://ejohn.org/blog/spicing-up-embedded-javascript/

两者的优点是,使用runkit,我可以非常努力地锁定脚本,速度巨大,而ecma解释器允许我有选择地将变量,函数和可能的对象绑定到javascript运行空间,但它仍处于测试状态,我还没看到它的运行情况。

这些是选择还是还有其他我不知道的东西可能是更好的选择?环境:linux,PHP-CGI 5.3或谷歌应用程序引擎。

有帮助吗?

解决方案

我不建议评估用户提供的PHP代码 - 即使在runkit沙箱中也是如此。 PHP是一种非常复杂的语言,它与环境密切相关。在不知道具体细节的情况下,我预计人们可以利用许多漏洞打破沙箱。

还有其他语言可以嵌入,而不是javascript。 Lua 是这类活动的热门选择。甚至还有一个 pecl中的php扩展,并附带了绑定。

无论如何,如果您要使用runkit路由,您可以查看共享内存解决方案,例如 memcache ,用于在进程之间交换数据。

其他提示

有一个PHP Sandbox可用于提供基本内容。这是早期阶段,但看起来很有希望。

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

或来自GitHub: https://github.com/fregster/PHPSandbox

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top