Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文本输入解释为PHP_Php_Class_Interpreter_Demo - Fatal编程技术网

将文本输入解释为PHP

将文本输入解释为PHP,php,class,interpreter,demo,Php,Class,Interpreter,Demo,我想让用户测试我的一个PHP类,其中包括裁剪和调整图像大小 我希望他们在文本字段中编写PHP代码,发送表单,然后运行代码。我该怎么做 还是让用户(任何人)演示PHP类的其他安全方法?您可以使用eval是。您可以在php中使用eval语句(前面由John链接),但是要非常小心。你真的不希望用户能够在你的机器上自由运行代码 我的建议是尝试提出一种不同的方法来进行演示-也许有几个灵活的例子。。。但是不要让他们直接运行代码我会使用几乎没有权限的用户帐户生成PHP进程。授予对单个目录的读写访问权,但仅此而

我想让用户测试我的一个PHP类,其中包括裁剪和调整图像大小

我希望他们在文本字段中编写PHP代码,发送表单,然后运行代码。我该怎么做


还是让用户(任何人)演示PHP类的其他安全方法?

您可以使用eval

是。您可以在php中使用eval语句(前面由John链接),但是要非常小心。你真的不希望用户能够在你的机器上自由运行代码


我的建议是尝试提出一种不同的方法来进行演示-也许有几个灵活的例子。。。但是不要让他们直接运行代码

我会使用几乎没有权限的用户帐户生成PHP进程。授予对单个目录的读写访问权,但仅此而已

你仍然会以无限循环等方式向DoS攻击敞开大门,但如果你绝对必须这样做,那么就像IE和Chrome那样在这个非常低权限的沙箱中运行代码

使用EVAL可能是最糟糕的主意。

您可以使用EVAL()函数,但不要这样做。真的

没有“安全”的方法让任何老用户在您的服务器上运行自己的PHP。你将自己暴露在一个潜在的伤害世界中


相反,为您自己的演示提供优秀的文档、代码示例和源代码,并鼓励潜在用户在他们自己的测试/开发服务器上试用。

如前所述,您可以使用
eval
功能,但这非常危险。如果您想让用户测试代码,请准备演示页面,展示可能的用法,例如,用户可以通过HTML表单添加参数。

不要用PHP或其他通用语言来思考,想想哪种语言足以表达图像处理领域中的操作。用户使用此域特定语言(DSL)提交表达式,这些表达式将在服务器端解析并传递给您的代码

首先,重要的是考虑图像处理操作的范围以及如何将它们结合起来。这将告诉你语言的表达能力。一旦你弄明白了这一点,语言在句法上的外观就有很多选择。该语言的语法可能取决于易用性和易解析性之间的权衡

如果您可以为这类表达式编写或找到解析器,那么对用户来说这可能是最简单的。事实上,有谁能推荐一个在这种情况下可以工作的现有表达式计算器(例如,Smarty可以安全地运行用户提交的表达式吗?),或者一个PHP解析器生成器

resize(rotate("foo.png", 90), 50)
像这样的语言对用户来说可能不太容易,但可以使用相当简单的堆栈机进行处理:

"foo.png" 90 rotate 50 resize
更简单的是,像这样基于XML的语言不需要自己的解析器:

<resize percent="50"><rotate degrees="90"><img src="foo.png"></rotate></resize>

使用DSL并不能保护您免受特定于域的攻击,例如,有人可能会使用上述语言将图像大小调整为无数像素,并耗尽所有服务器内存。因此,DSL必须有某种运行时环境来限制任何用户提交的脚本可以使用的资源量。

您可以使用eval,但必须采取一些预防措施

如果您的安全顾虑只是“谨慎”而不是“偏执”,那么您确实有几个选择:

  • 如果您有一个专门用于此项目的Apache/PHP实例,请在PHP.ini中设置disable_functions选项,并关闭所有与文件和网络相关的函数。这将影响整个PHP安装,并将破坏一些令人惊讶的东西,如phpmyadmin
  • 如果没有专用服务器,请尝试“runkit”:仅在已运行的脚本中禁用功能
  • 也许更多的工作?设置一个虚拟机(VirtualBox、VMware等),该虚拟机从主机操作系统内进行主动防火墙,内存和磁盘空间分配最少,并在那里运行不受信任的代码

如果你是偏执狂。。。为所有上传的代码设置审批流程。

让用户运行PHP代码没有安全的方法。这不是很危险,而是非常危险。只有在不采取预防措施的情况下才有危险。是的,每个人都说使用eval()很可怕。不会让他们那样做的!我想我要做几个演示!如果在VM中运行不受信任的代码,则无限循环等都不是问题。