我需要在php脚本中使用imagemagick的转换,所以我启用了exec。
现在我觉得让exec启用并不安全,我想仅限于“转换”命令。
有办法吗?非常感谢
答案 0 :(得分:4)
您不能限制PHP exec
函数执行的命令。即使你对exec函数执行一些字符串检查以使其中包含“convert”之类的东西,我也可以绕过它并执行这样的任意命令:
"convert img.jpg img.png ; id ; ls -al ; wget ....."
所以这不是解决方案。
建议:
a)不要启用exec,只需使用ImageMagick PHP扩展: http://www.php.net/manual/en/book.imagick.php 它就像命令提示符,而是它的PHP扩展。使用此PHP扩展,您可以使用ImageMagick的命令行界面执行所有操作。 (推荐)
b)尝试Imagemagick的替代方案,如果你只想转换/调整图像大小,那么有许多PHP类和扩展用于这些目的。
c)编写自己的PHP扩展,它将获取您想要传递给convert
的参数,并让扩展处理命令执行,但是您需要清理传递给它的字符串和命令。
d)正确设置文件权限,不允许通过Web上传新文件(至少可执行文件),为文件和文件夹设置适当的权限,检查代码是否为SQL注入,文件包含攻击和所有其他应用程序漏洞等。确保您拥有安全的代码和服务器,现在如果您确信您的服务器是安全的,您可以启用exec,但不能限制将要执行的命令。 (不推荐)