2016-10-24 3 views
1

그래서 ImageMagick을 사용하는 도우미와 이미지에서 QR 데이터를 추출하는 명령 행에서 zbar을 실행하는 도우미가 있습니다. 이미지 소스는 매개 변수 여야합니다.레일에서 명령 주입 제거

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

brakeman은 분명히 여기 나에게 command injection 경고를 제공합니다. backticks 만 사용하면 동일한 경고가 표시되고 system은 필요한 결과를 산출하지만 true을 출력하고 출력하지 않습니다. QR 디코딩 래퍼/gem 또는 Open3을 사용하고 싶지 않습니다. 필자가 언급 한 두 가지 옵션을 사용하는 것을 제외하고 명령 주입을 피하기 위해 매개 변수로 이미지 소스를 살균 할 수 있어야합니까?

+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 

은 실제 이미지 형식으로 위의 png를 교체하거나 ImageMagick이 입력의 매직 넘버에서 파일 유형을 확인 할 수 있도록 완전히 png:를 제거합니다.

+0

도움이되었습니다. 고맙습니다 –