删除 rails 中的命令注入
Remove command injection in rails
所以我有一个使用 ImageMagick
的助手和其中的一个方法,它在命令行上强制执行 zbar
从图像中提取 QR 数据。图像源必须是参数化的。
qr_code_data = %x(zbarimg -q #{src})
显然,brakeman
在这里给了我一个 command injection
警告。仅使用 backticks
会给出相同的警告,虽然 system
会产生所需的结果,但它是 returns true
而不是输出。我不想使用 QR 解码 wrapper/gem 或 Open3。我需要知道我是否可以将我的图像源清理为参数以避免命令注入,除非使用我提到的两个选项。
ImageMagick 通常支持使用 STDIN 输入。 IO.popen 支持用文件内容替换子进程的标准输入。请尝试以下操作:
qr_code_data = ""
IO.popen(['zbarimg','-q','png:-'], :in=>[src]) do |pipe|
qr_code_data = pipe.read
end
将上面的 png
替换为您的实际图像格式或完全删除 png:
以允许 ImageMagick 根据输入的幻数确定文件类型。
所以我有一个使用 ImageMagick
的助手和其中的一个方法,它在命令行上强制执行 zbar
从图像中提取 QR 数据。图像源必须是参数化的。
qr_code_data = %x(zbarimg -q #{src})
显然,brakeman
在这里给了我一个 command injection
警告。仅使用 backticks
会给出相同的警告,虽然 system
会产生所需的结果,但它是 returns true
而不是输出。我不想使用 QR 解码 wrapper/gem 或 Open3。我需要知道我是否可以将我的图像源清理为参数以避免命令注入,除非使用我提到的两个选项。
ImageMagick 通常支持使用 STDIN 输入。 IO.popen 支持用文件内容替换子进程的标准输入。请尝试以下操作:
qr_code_data = ""
IO.popen(['zbarimg','-q','png:-'], :in=>[src]) do |pipe|
qr_code_data = pipe.read
end
将上面的 png
替换为您的实际图像格式或完全删除 png:
以允许 ImageMagick 根据输入的幻数确定文件类型。