场景:
用户输入视频URL。
使用
exec("youtube-dl " . escapeshellarg($url));
下载视频。
问题:
这样做安全吗?
谢谢!
场景:
用户输入视频URL。
使用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'
作为输出。因此,你无法欺骗它。