将嵌入式脚本添加到PHP页面

时间:2011-09-29 17:06:13

标签: php parsing dsl

我有一个这样的课程:

class Person {
    function __construct($name) {
        $this->name = $name;
    }
    function show() {
        echo $this->name;
    }
}

在我的PHP页面上,我想要一个文本框,让我输入自定义语言脚本或PHP脚本(没有安全漏洞),如:

PHP示例:

    $me = new Person("Alexander");
    $me->show();

并在页面上查看带有show()函数结果的输出。显然我不希望人们编写恶意代码。这是怎么做到的?我对这种类型的编程没有任何经验。

问题域的示例:

互动“学习php”网站。用户可以输入php并查看结果,而无需设置自己的Web服务器。

“编写攻击脚本”游戏。用户编程他们的舰队AI并观察与计算机AI战斗的结果。

1 个答案:

答案 0 :(得分:1)

最简单的选择是运行沙盒虚拟服务器。你也可以试试PHP sandbox,虽然看起来不够。

最终,最安全的方法是创建自己的解释器,这些解释器根本没有让恶意脚本执行任何破坏性任务的功能(即它们在现实世界中没有任何影响),这是一个可以填充的主题图书。解释器将代码转换为可由VM执行的格式,该模拟模拟您想要支持的任何系统功能并提供沙盒系统调用(尽管后者也可以由您创建的解释器库提供)。将项目基于VM可以支持多种语言,而无需为每种语言创建执行程序。 Microsoft的CLIVES就是一个例子。

对于包含更多信息的图书,compilers/interpretersvirtual machines上的任何内容基本相关。有关VM的更多信息,另请参阅“Good literature about making a VM”,“Simple Interpreted Language Design & Implementation”。