设想:
用户输入视频网址
php下载视频
exec( "youtube-dl " . escapeshellarg($url) );
问题:
它足够安全吗?
谢谢!
设想:
用户输入视频网址
php下载视频exec( "youtube-dl " . escapeshellarg($url) );
问题:
它足够安全吗?
谢谢!
escapeshellarg
防止shell误解你的命令行,所以你在那里是安全的。但是,您仍在将用户输入传递给 youtube-dl。虽然这不是安全风险,但在某些情况下会失败。您要添加--
以确保用户的输入是 URL 而不是选项:
exec( "youtube-dl -- " . escapeshellarg($url) );
这也将解决“URL”以破折号开头的问题。例如,-8F4YF_pH-4
是一个有效的 YouTube 视频 ID。
是的,它足够安全。你可以检查它是否工作。
escapeshellarg()
在字符串周围添加单引号并引用/转义任何现有的单引号,从而允许您将字符串直接传递给 shell 函数并将其视为单个安全参数。此函数应用于将来自用户输入的单个参数转义到 shell 函数。
$arg = 'test\'test';
echo escapeshellarg($arg);
它将显示'test'\''test'
为 output 。所以你不能欺骗它。