代码之家  ›  专栏  ›  技术社区  ›  David

PHP5内的沙盒或替代品的建议?[关闭]

  •  1
  • David  · 技术社区  · 16 年前

    我一直在缓慢地开发一个人事项目来运行一个类似WebMud的游戏,使用extjs作为前端。我所做的设计选择之一是允许用户为游戏逻辑生成评估代码。所以当玩家进入一个新的“房间”时,会按照“玩家以前在这里吗,如果他们在这里,他们是否有X个库存项目”,调用一些状态脚本,然后做出相应的响应。此外,基本的房间“操作”将被硬编码(go n/s/e/w),但高级操作将作为同一用户生成的评估脚本提供。

    最初我会很懒惰,使用经过评估的PHP来实现这个逻辑,但我的偏执感开始出现了。所以我找到的两个备选方案是runkit_沙盒,但它不支持主线程和沙盒(只是简单的数据类型和数组)之间的对象交换,也不支持使用ecmascript作为我的游戏逻辑。 http://ejohn.org/blog/spicing-up-embedded-javascript/ .

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

    这些是供选择还是有其他我不知道的选择?环境:Linux、php-cgi 5.3或作为Google应用程序引擎。

    2 回复  |  直到 12 年前
        1
  •  4
  •   troelskn    16 年前

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

    除了JavaScript,还有其他语言可以嵌入。 Lua 是这类事物的流行选择。甚至还有一个 php extension in pecl ,并为其绑定。

    如果你还是要走runkit路线,你可以研究一个共享内存解决方案,比如 memcache ,用于在进程之间交换数据。

        2
  •  2
  •   Paul Fryer    13 年前

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

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

    或从Github: https://github.com/fregster/PHPSandbox

    保罗