using the exec() function can be a security risk and should be avoided if possible.
这有点概括 – 使用exec()构建安全解决方案是完全可能的.但这确实很难:执行外部程序有很多陷阱,特别是如果你将外部参数传递给它们.
正如你所说,第一步是使用escapeshellarg()来逃避一切,以防止注入其他可能有害的命令.
那么问题是输入错误值的损坏可能会导致被调用的程序.例如,
>对200000 x 200000像素的大视频运行ffmpeg操作可能会导致服务器挂断,因为该调用会尝试分配不可能的内存量.因此,您必须清理用户可以输入的大小值,如果它们太大或不是数字,则退出.
>恶意用户可以告诉ffmpeg使用配置文件并尝试从中创建视频,可能导致配置文件用作输出,因此您需要限制用户可以指定的文件路径范围.
等等等等.
此外,您需要考虑通过仅仅请求数量来杀死服务器的可能性.如果我每秒向PHP脚本发送50个请求,然后又调用复杂的ffmpeg命令,该怎么办?服务器可能很容易在负担下解决,您可能希望防止这种情况发生.
所以:使用exec()时没有固有的安全问题,但是需要仔细查看传递给它的每个传入参数.