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

标签 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 的战斗结果。

最佳答案

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

最终,最安全的方法是创建您自己的解释器,这些解释器根本不具备让恶意脚本执行任何破坏性任务的能力(即它们对现实世界没有影响),这是一个可以填补的话题图书。解释器将代码翻译成可以由 VM 执行的格式,它模拟您想要支持的任何系统功能并提供沙盒系统调用(尽管后者也可以由您创建的解释器库提供)。基于 VM 的项目允许您支持多种语言,而不必为每种语言创建一个执行程序。微软的CLIVES举个例子。

当涉及到包含更多信息的书籍时,基本上 compilers/interpreters 上的所有内容和 virtual machines具有首要相关性。有关 VM 的更多信息,另请参阅“Good literature about making a VM”、“Simple Interpreted Language Design & Implementation”。

关于php - 将嵌入式脚本添加到 PHP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600844/

相关文章:

c# - 通过网络读取和解析大型文本文件的最佳方式是什么?

c# - 领域特定语言 (DSL) 和领域驱动设计 (DDD)

C# 创建隐藏事务

spring - Maven 3 的 POM 具有新的 DSL 格式。 Spring applicationcontext.xml 文件是否有类似的格式?

php - 通过 PHP mysql PDO 根据下拉列表选择的值更新表

php - 在 laravel 5.2 中使用基于 api_token 的身份验证时出现 NotFoundHttpException

php - 错误 "Uncaught PDOException",即使我使用 try-catch

php - 键入内容后,值会出现在文本框中

r - R 是否有任何包用于解析 URL 的各个部分?

c++ - 为模拟解析数据文件的优雅方式