1

我一直在慢慢地从事一个人事项目,以使用 extjs 作为我的前端来运行类似 webmud 的游戏。我做出的设计选择之一是允许用户为游戏逻辑生成评估代码。因此,当玩家进入一个新的“房间”时,会调用一些状态脚本,如“玩家以前来过这里吗,如果他们在这里,他们是否有 x 个库存物品”,然后做出相应的响应。此外,基本的房间“动作”将被硬编码( go N/S/E/W ),但高级动作将作为相同的用户生成的评估脚本可用。

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

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

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

4

2 回答 2

4

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

除了 javascript,您还可以嵌入其他语言。Lua是这类事情的流行选择。pecl中甚至还有一个php 扩展,并为其绑定。

如果您仍然要使用 runkit 路线,则可以研究共享内存解决方案,例如memcache,用于在进程之间交换数据。

于 2008-10-27T20:33:55.560 回答
2

有一个 PHP 沙箱可用于基本的东西。这是早期阶段,但看起来很有希望。

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

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

保罗

于 2012-01-04T10:11:38.593 回答