6

设想:

  1. 用户输入视频网址

  2. php下载视频exec( "youtube-dl " . escapeshellarg($url) );

问题:

它足够安全吗?

谢谢!

4

2 回答 2

4

escapeshellarg防止shell误解你的命令行,所以你在那里是安全的。但是,您仍在将用户输入传递给 youtube-dl。虽然这不是安全风险,但在某些情况下会失败。您要添加--以确保用户的输入是 URL 而不是选项:

exec( "youtube-dl -- " . escapeshellarg($url) );

这也将解决“URL”以破折号开头的问题。例如,-8F4YF_pH-4是一个有效的 YouTube 视频 ID。

于 2014-05-26T10:07:44.897 回答
2

是的,它足够安全。你可以检查它是否工作。

escapeshellarg()在字符串周围添加单引号并引用/转义任何现有的单引号,从而允许您将字符串直接传递给 shell 函数并将其视为单个安全参数。此函数应用于将来自用户输入的单个参数转义到 shell 函数。

$arg = 'test\'test';
echo escapeshellarg($arg);

它将显示'test'\''test'为 output 。所以你不能欺骗它。

于 2014-05-26T09:58:24.290 回答