Внедрение команды 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 также.

Другие вопросы по тегам