1

Мне нужно вызвать wget из серверного приложения с частями URL-адреса, которыми управляет пользователь. Если хранить аргументы в переменной URL среде с использованием setenv() в серверном приложении, а затем выполнить в раздвоенной оболочкеПередача аргумента через переменную окружения, полностью ли она безопасна?

wget somehost/"$URL" 

я могу предположить, что $URL не раскрывается каким-либо образом, и это интерпретируется полностью как часть url? Совместим ли это с оболочкой Bourne (так sh, а не bash, например, Ubuntu)?

+0

Как запустить wget из серверного приложения? Использование 'system()'? – Jens

+0

Двойные кавычки не должны расширяться или интерпретироваться любой совместимой с POSIX оболочкой. – PSkocik

+0

Возможные проблемы: 1. Если порожденные источники оболочки '.bashrc', тогда он будет искать URL-адрес там, если он существует. 2. Если вы создаете несколько процессов с разными «URL», некоторые из них могут получить неправильный 'URL'. – alvits

ответ

0

Оболочка будет выполнять расширение параметра $URL, прежде чем оно вызывает (forks/execs) команду wget. Поскольку у вас есть параметр в двойных кавычках, разделение слов не выполняется, а «somehost/любой URL-адрес расширяется до» будет одним из аргументов.

Результат может быть виден для других пользователей в файле ps(1) output как command plus args.

Кроме того, данные, хранящиеся в переменных среды, могут быть видны, если реализация ps(1) в вашей системе поддерживает -e, чтобы показать среду (например, FreeBSD).

Если у вас есть вопрос, можете ли вы скрыть конфиденциальную информацию, такую ​​как учетные данные доступа таким образом, ответ вообще «нет».

+0

Я просто заинтересован в командной инъекции, поэтому, если я правильно понимаю, это нормально. –