我想让用户测试我的PHP类,其中包括裁剪和调整图像大小。
我希望他们在文本字段中编写PHP代码,发送表单,然后运行他们的代码。我怎么能这样做?
或者让用户(任何人)演示PHP类的其他安全方法是什么?
答案 0 :(得分:5)
我会使用具有next-to-no权限的用户帐户生成PHP进程。将读写权限授予单个目录,但就是这样。
你仍然可以通过无限循环等方式开启自己的DoS攻击,但是如果你绝对必须这样做,那么在IE和Chrome这样非常低权限的沙箱中运行代码。
使用EVAL可能是最糟糕的想法。
答案 1 :(得分:4)
是。您可以在php中使用eval语句(之前由John http://us2.php.net/manual/en/function.eval.php链接),但要非常小心。您真的不希望用户能够自由地在您的计算机上运行代码。
我的建议会尝试采用不同的方法来进行演示 - 可能是一些灵活的例子......但不要让他们直接运行代码
答案 2 :(得分:3)
你可能使用eval()函数,但不执行此操作。严重。
没有“安全”的方法让任何旧用户在您的服务器上运行自己的PHP。你正在暴露自己潜在的伤害世界。
相反,请提供优秀的文档,代码示例以及您自己演示的源代码,并鼓励潜在用户在自己的测试/开发服务器上进行试用。
答案 3 :(得分:2)
如前所述,您可以使用eval
功能,但这非常危险。如果您希望用户测试代码,请准备演示页面以显示可能的用法,例如,用户可以通过HTML表单添加参数。
答案 4 :(得分:1)
答案 5 :(得分: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并不能保护您免受特定于域的攻击,例如,有人可能会使用上述语言将图像大小调整为数百万像素并耗尽所有服务器内存。因此,DSL必须有某种运行时环境,限制任何用户提交的脚本可以使用的资源量。
答案 6 :(得分:0)
您可以使用 eval ,但不能没有采取一些预防措施。
如果您的安全问题只是“谨慎”而不是“偏执”,那么您有几个选择:
如果你是偏执狂...为所有上传的代码设置批准程序。