2016-10-24 3 views
1

Итак, у меня есть помощник, который использует ImageMagick и метод внутри него, который принуждает zbar в командной строке извлекать QR-данные из изображения. Источник изображения должен быть параметрическим.Удалить команду впрыска в рельсы

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

brakeman дает мне command injection предупреждение здесь, очевидно. Использование только backticks дает такое же предупреждение, и в то время как system будет выдавать требуемый результат, он возвращает true, а не выход. Я не хочу использовать обертку/драгоценный камень QR-декодирования или Open3. Мне нужно знать, могу ли я дезинфицировать источник изображения в качестве параметра, чтобы избежать ввода команды, за исключением использования двух опций, о которых я упомянул.

+0

ImageMagick обычно поддерживает использование STDIN для ввода. Попробуйте 'zbarimg -q png: -'. Замените «png» на ваш фактический формат изображения. Затем используйте [IO.popen] (http://ruby-doc.org/core-2.3.1/IO.html#method-c-popen) вместо 'system'. Я не уверен на 100%, что это сработает, и у вас нет подходящей тестовой системы. Удачи. – Eric

ответ

1

ImageMagick обычно поддерживает использование STDIN для ввода. IO.popen поддерживает замену stdin подпроцесса на содержимое файла. Попробуйте следующее:

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

Заменить png выше вашего фактического формата изображения или удалить полностью, чтобы позволить ImageMagick определить тип файла из волшебного номер входа.

+0

Это помогло. Спасибо –