我想让用户测试我的一个 PHP 类,其中包括裁剪和调整图像大小。
我希望他们在文本字段中编写 PHP 代码,发送表单,然后运行他们的代码。我怎样才能做到这一点?
还是让用户(任何人)演示 PHP 类的其他安全方法?
我想让用户测试我的一个 PHP 类,其中包括裁剪和调整图像大小。
我希望他们在文本字段中编写 PHP 代码,发送表单,然后运行他们的代码。我怎样才能做到这一点?
还是让用户(任何人)演示 PHP 类的其他安全方法?
我会使用几乎没有权限的用户帐户来生成 PHP 进程。授予对单个目录的读写访问权限,仅此而已。
您仍然在使用无限循环等向 DoS 攻击敞开大门,但如果您绝对必须这样做,那么请在这个权限非常低的沙箱中运行代码,就像 IE 和 Chrome 一样。
使用 EVAL 可能是最糟糕的主意。
是的。您可以在 php 中使用 eval 语句(之前由 John http://us2.php.net/manual/en/function.eval.php链接),但是要非常小心。您真的不希望用户能够在您的机器上自由运行代码。
我的建议是尝试用不同的方法来做演示——也许是一些灵活的例子……但不要让他们直接运行代码
您可以使用 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,但并非没有一些预防措施。
如果您的安全问题仅仅是“谨慎”而不是“偏执”,那么您确实有几个选择:
如果您偏执...为所有上传的代码设置批准流程。