私のプロジェクトのいくつかのライブラリに次のコードがあり、これは Sideqik Worker で実行されます。
def self.generate_pdf(report)
file_name = report['r_file'].gsub('.ric', '')
path = "#{Rails.root}/report_files"
java_cmd = "./fileprint_linux.sh"
if %w(development test).include?(Rails.env)
command = "cd #{path}; sh #{java_cmd} silent #{report.r_file.path}"
else
temp = Tempfile.new("#{file_name}.tmp")
File.open(temp.path, 'wb') { |f| f.write(open(report.r_file.url).read) }
command = "cd #{path}; sh #{java_cmd} silent #{temp.path}"
end
stdin, stdout, stderr = Open3.popen3(command.shellescape)
if stderr.read.blank?
.......
end
end
プロジェクトで Brakeman (3.2.1) を実行すると、次のセキュリティ警告が表示されます。
Possible command injection near line 21: Open3.popen3(("cd #{"#{Rails.root}/report_files"}; sh #{"./fileprint_linux.sh"} silent #{report.r_file.path}" or "cd #{"#{Rails.root}/report_files"}; sh #{"./fileprint_linux.sh"} silent #{Tempfile.new("#{report["r_file"].gsub(".ric", "")}.tmp").path}"))
そして、この部分が強調表示されているため、警告が発生すると思います。
report['r_file'].gsub('.ric', '')
警告は、警告の詳細についてこのページにもリンクしていますが、対処方法が見つかりませんでした: http://brakemanscanner.org/docs/warning_types/command_injection/
他の投稿やページを見てこれに対する解決策を見つけようとしましたが、運がなかったので、この投稿です。
Brakeman によって報告されたこの潜在的な脆弱性を修正するには、この状況にどのように対処すればよいですか?
前もって感謝します!