我正在编写一个 PHP 脚本,旨在通过 exec() 函数运行可执行文件(ffmpeg.exe)。问题是我已经读到使用 exec() 函数可能存在安全风险,应该尽可能避免。我一直在研究如何安全地运行 exec() 函数,唯一遇到的问题是使用 escapeshellcmd 或 escapeshellarg 过滤命令字符串。我想知道的是,在使用 exec() 函数时是否可以进一步提高安全性,或者是否有 exec() 的安全替代方案。任何帮助,将不胜感激。
这是我的代码;
define('FFMPEG_LIBRARY', 'c:\\ffmpeg7\\ffmpeg\\bin\\ffmpeg ');
$transcode_string = FFMPEG_LIBRARY." -i " . $srcFile . " -acodec libmp3lame -ab 64k -ar 22050 -ac 1 -vcodec libx264 -b:v 250k -r 30 -f flv -y " . $destFile;
$transcode_string = escapeshellcmd($transcode_string);
exec($transcode_string);
$srcFile 基本上是用于转码的视频,而 $destFile 是我希望创建的输出文件。
使用 exec() 函数可能存在安全风险,应尽可能避免。
这有点概括 - 完全有可能使用以下方式构建安全解决方案exec()
。但这确实很难:执行外部程序有很多陷阱,特别是当您向它们传递外部参数时。
正如你所说,第一步是使用以下命令来逃避一切escapeshellarg()
以防止注入其他可能有害的命令。
那么问题是输入错误的值可能会对正在调用的程序造成什么损害。例如,
等等等等。
另外,您需要考虑仅通过请求数量来杀死服务器的可能性。如果我每秒向 PHP 脚本发送 50 个请求,而该脚本又调用复杂的 ffmpeg 命令会怎样?服务器可能很容易在负载下崩溃,您可能需要防止这种情况发生。
所以:使用上不存在固有的安全问题exec()
,但是传递给它的每个传入参数都需要非常仔细地查看。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)