Ответ 1
Я просто хотел бы предисловие к этому: Любой пользовательский ввод должен рассматриваться как опасный. Я бы не рекомендовал выполнять какую-либо команду с использованием пользовательских входов.
Первое, что вам нужно сделать, это заблокировать вход как можно больше. Рассмотрите возможность ограничения длины user_input_vars_from_json
для предотвращения переполнения буфера и DoS-атак. Я также рекомендую попытаться выяснить способ проверки и ограничения "варсов", которые вы пытаетесь установить в user_input_vars_from_json
JSON, для фильтрации любых нежелательных ключей/значений.
Как только ваш вход очищен, вы можете использовать Kernel # system в сочетании с Shellwords, чтобы как можно лучше подойти к выполнению вашей команды из вашей работы:
require 'shellwords'
system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\""