2016-10-24 95 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支持用文件內容替換子進程的標準輸入。請嘗試以下操作:

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

更換png以上實際圖像格式或刪除完全允許ImageMagick的確定從輸入的幻數的文件類型。

+0

這有幫助。謝謝 –