在我正在处理的一个项目中,我们使用 backtip 方法来运行系统命令。
resp = `7z x #{zip_file_path} -p#{password} -o#{output_path}`
效果很好。但由于它可能导致命令注入漏洞,我们计划使用exec
或open3
. 我们在open3
执行系统命令时面临问题。我们将其用于解决命令注入。
stdin, stdout, stderr = Open3.popen3("7z", "x", zip_file_path, "-p", password, "-o", output_path)
但这会导致以下错误
error = stderr.readlines
# ["\n", "\n", "Command Line Error:\n", "Too short switch:\n", "-o\n"]
当我包含这样的参数时,这有效。
stdin, stdout, stderr = Open3.popen3("7z", "x", zip_file_path, "-p#{password}", "-o#{output_path}")
但是我们不应该单独传递参数以避免命令注入吗?还是我对第一个版本做错了什么?