“escapeshellarg”足够安全吗?

8

场景:

  1. 用户输入视频URL。

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

问题:

这样做安全吗?

谢谢!

2个回答

6

escapeshellarg函数可以防止shell误解你的命令行,所以这方面是安全的。但是,你仍然会将用户输入传递给youtube-dl。虽然这不构成安全风险,但在某些情况下可能会失败。你需要添加--来确保用户输入的是一个URL而不是选项:

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

这也会解决以短横线开头的 "URL" 问题。例如,-8F4YF_pH-4 是一个有效的YouTube视频ID。


2

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

escapeshellarg() 会在字符串周围添加单引号,并引用/转义任何现有的单引号,使您可以直接将字符串传递给 shell 函数, 并将其作为单个安全参数处理。应该使用此函数来转义来自用户输入的 shell 函数中的单个参数。

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

它会显示'test'\''test'作为输出。因此,你无法欺骗它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接