Внедрение команды ruby exec (защита!)
Я запускаю самоцвет тормозного механизма над проектом... он жалуется на некоторые выполняемые команды exec.
Текущий код:
Process.fork {exec "pdftk #{uncrypted_pdf_file} output #{pdf_file} owner_pw #{password} allow printing"}
Тормоз жалуется, предполагая, что есть возможность для командного впрыска. Я пробовал несколько разных комбинаций вызова exec, например:
Process.fork {exec "pdftk", uncrypted_pdf_file, " output #{pdf_file} ", "owner_pw #{password}", "allow printing"}
Но, как и следовало ожидать, каждый аргумент просто передается pdftk по очереди, и поэтому он падает.
Есть ли способ вызвать команду за один выстрел, а также защитить от инъекции команды. В нашем конкретном случае это достаточно безопасно, так как мы контролируем все переменные, но было бы хорошо узнать правильный путь.
1 ответ
Вам нужно передать каждый аргумент отдельно:
exec "pdftk", uncrypted_pdf_file, "output", pdf_file, "owner_pw", password, "allow", "printing"
Возможно, вам придется указать полный путь к pdftk
также.