所以我有一个使用ImageMagick
的助手,它里面有一个方法,在命令行上强制zbar
从图像中提取QR数据。图像源必须是参数化的。
qr_code_data = %x(zbarimg -q #{src})
显然, brakeman
在这里给了我一个command injection
警告。只使用backticks
会给出相同的警告,虽然system
会产生所需的结果,但它返回的是true
而不是输出。我不想使用qr解码包装器/gem或Open3。我需要知道我可以消毒我的图像源作为一个参数,以避免命令注入,除了使用我提到的两个选项。
ImageMagick一般支持使用STDIN作为输入。IO。Popen支持用文件的内容替换子进程的stdin。试试以下命令:
qr_code_data = ""
IO.popen(['zbarimg','-q','png:-'], :in=>[src]) do |pipe|
qr_code_data = pipe.read
end
将上面的png
替换为您的实际图像格式或完全删除png:
,以允许ImageMagick从输入的幻数中确定文件类型