1

所以我有一个使用的助手ImageMagick和其中的一个方法,它zbar在命令行上强制从图像中提取 QR 数据。图像源必须是参数化的。

qr_code_data = %x(zbarimg -q #{src})

brakeman很明显,这里给了我一个command injection警告。使用只会backticks给出相同的警告,虽然system会产生所需的结果,但它会返回true而不是输出。我不想使用 QR 解码包装器/gem 或 Open3。我需要知道我是否可以将图像源作为参数进行清理以避免命令注入,除非使用我提到的两个选项。

4

1 回答 1

1

ImageMagick 通常支持使用 STDIN 进行输入。IO.popen 支持将子进程的标准输入替换为文件的内容。尝试以下操作:

qr_code_data = ""
IO.popen(['zbarimg','-q','png:-'], :in=>[src]) do |pipe|
  qr_code_data = pipe.read
end

png上面替换为您的实际图像格式或png:完全删除以允许 ImageMagick 从输入的幻数确定文件类型。

于 2016-10-24T10:20:58.417 回答