删除 rails 中的命令注入

Remove command injection in rails

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

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

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

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 根据输入的幻数确定文件类型。