2009-07-23 65 views
2

我想让用户测试我的PHP类,其中包括裁剪图像和调整图像大小。将文本输入解释为PHP

我想他们写PHP代码中的文本字段,将表格,然后将自己的代码会被执行。我怎样才能做到这一点?

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

+1

让用户运行他们的PHP代码没有安全的方法。 – RaYell 2009-07-23 12:46:22

回答

4

是的。你可以在php中使用eval语句(前面链接约翰http://us2.php.net/manual/en/function.eval.php),但要非常小心。你真的不希望用户能够自由地在你的机器上运行代码。

我的建议是尽量想出不同的方法做演示 - 也许是一个灵活的几个例子......但不要让他们跑了代码直接

1
+1

这会工作,但非常危险。 – 2009-07-23 12:47:44

+3

这不是非常危险,这是非常危险的。 – 2009-07-23 12:51:14

+0

如果你不采取一些预防措施,这只是危险的。 – 2009-11-15 23:19:57

5

我会使用用户帐户产卵的PHP程序具有无与伦比的权限。将读写权限授予单个目录,但就是这样。

你还是开自己的DoS具有无限循环并且这样的攻击,但如果你绝对必须这样做,然后运行该代码在这个非常低的权限沙箱像IE和Chrome浏览器执行。

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

3

可能使用eval()函数,但不要做。认真。

没有“安全”的方式让任何老用户在您的服务器上运行他们自己的PHP。你正在接触一个潜在的伤害世界。

相反,对于自己的演示提供出色的文档,代码样本和源,并鼓励潜在用户试用它自己的测试/开发服务器。

2

因为它已经指出,你可以使用eval功能,但它是非常危险的。如果您希望用户测试代码,准备展示可能使用情况的演示页面,并且可以通过用户通过HTML表单添加参数。

0

不认为PHP的条款或其他通用的语言,认为最小的语言,它足以表达你的图像处理领域的业务。用户使用该域特定语言(DSL)提交表达式,这些表达式在服务器端解析并传递给您的代码。

最重要的是想想图像处理操作的范围以及它们如何组合。这会告诉你语言的表现力如何。一旦你解决了这个问题,语言在语法上会有多种选择。语言的语法可能取决于易用性和易于解析之间的折衷。

如果你能写或找到这种表达式解析器,它可能是用户最容易。其实,任何人都可以推荐一个现有的表达式评估器,可以在这种情况下工作(例如,Smarty能否安全地运行用户提交的表达式?),或者确实是PHP的解析器生成器?

resize(rotate("foo.png", 90), 50) 

this语言可能是用户不容易,但它可以使用一个相当简单的堆栈机进行处理:

"foo.png" 90 rotate 50 resize 

更容易,这样一种基于XML的语言不需要自己的解析器:

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

使用DSL不能保护你免受特定领域的攻击,例如有人可能使用上面的语言,将图像调整到数不胜数像素nd用尽所有的服务器内存。因此,必须为DSL提供某种运行时环境,以限制任何用户提交的脚本可以使用的资源数量。

0

您可以使用eval,但不是没有一些预防措施。

如果您的安全问题仅仅是“谨慎”而不是“偏执狂”,你有几种选择:

  • 如果你有一个专门的Apache/PHP的实例就是为这个项目你,集php.ini中的disable_functions选项并关闭所有与文件和网络相关的功能。这将影响整个PHP安装,并会破坏一些令人惊讶的事情,如phpmyadmin。
  • 如果您没有专用服务器,请尝试'runkit':http://php.net/manual/en/book.runkit.php以仅在已经运行的脚本中禁用功能。
  • 也许更多的工作?设置一个虚拟机(VirtualBox,VMware等),这个虚拟机在主机操作系统内被极大地防火墙分配内存和磁盘空间,然后在那里运行不受信任的代码。

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