2016-10-24 5 views
1

ImageMagickを使用するヘルパーがあり、コマンドラインにzbarを適用してイメージからQRデータを抽出します。画像ソースはパラメトリックでなければなりません。レールでコマンド注入を削除する

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

brakemanは明らかに、ここで私にcommand injection警告を与えます。 backticksのみを使用すると、同じ警告が表示され、systemは必要な結果を生成しますが、出力ではなくtrueを返します。 QRデコードラッパー/ gem、Open3を使用したくありません。私は、私が言及した2つのオプションを使用する以外は、コマンドインジェクションを避けるためのパラメータとして画像ソースをサニタイズできるかどうかを知る必要があります。

+0

ImageMagickは一般的にSTDINを入力に使用することをサポートしています。 'zbarimg -q png:-'を試してみてください。 'png'を実際のイメージフォーマットに置き換えてください。次に、 'system'の代わりに[IO.popen](http://ruby-doc.org/core-2.3.1/IO.html#method-c-popen)を使います。私はこれが機能し、適切なテストシステムを準備していないことを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 

ImageMagickには入力のマジックナンバーからファイルの種類を決定できるようにするために、あなたの実際の画像フォーマットで上記pngを交換するか、完全にを削除します。

+0

それは助けました。ありがとうございました –

関連する問題