【发布时间】:2012-01-20 02:49:48
【问题描述】:
我正在编写一个 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 是我希望创建的输出文件。
【问题讨论】:
-
$srcFile来自哪里,这个脚本将以什么身份使用? -
很抱歉。我已经编辑了我的问题以包含我正在使用的代码。
-
$srcFile和$destFile来自哪里?它们是否包含用户提供的值? -
@Pekka:$srcFile 是上传的视频(例如 video.3gp),而 $destFile 是转码后的输出文件(例如 video.flv)。
-
@siberian 用户提供了文件名还是只提供了文件?