“escapeshellarg”足够安全吗?

时间:2014-05-26 09:17:37

标签: php security exec youtube-dl

情景:

  1. 用户输入视频网址

  2. php使用exec( "youtube-dl " . escapeshellarg($url) );

  3. 下载视频

    问题:

    足够安全吗?

    谢谢!

2 个答案:

答案 0 :(得分:3)

escapeshellarg会阻止 shell 误解您的命令行,因此您可以安全地使用它。但是,您仍然将用户输入传递给youtube-dl。虽然这不是安全风险,但在某些情况下会失败。您想添加--以确保用户的输入是网址而不是选项:

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

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

答案 1 :(得分:2)

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

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

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

它会显示'test'\''test'作为输出。所以你不能欺骗它。