Из программы C я хочу вызвать сценарий оболочки с именем файла в качестве параметра. Пользователи могут управлять именем файла. C-то вроде (инициализация/проверка ошибок опущена):Есть ли способ предотвратить выполнение команды sh/bash?
sprintf(buf, "/bin/sh script.sh \"%s\"", filename);
system(buf);
целевое устройство фактически встроенной системой, так что я не нужно беспокоиться о злонамеренных пользователей. Очевидно, что это будет вектор атаки в веб-среде. Тем не менее, если в системе есть имя файла, которое, например, содержит обратные кавычки в своем имени, команда будет терпеть неудачу, потому что оболочка будет выполнять расширение по имени. Есть ли способ предотвратить подстановку команд?
Используйте одиночные кавычки '' 'вместо этого. Баш не заменит это. То есть 'sprintf (buf,"/bin/sh script.sh '% s' ", filename);'. Тогда все зависит от того, что делает 'script.sh'. Вы также можете указать '-r' для ограниченной оболочки, но есть некоторые ограничения того, что вы можете сделать в такой оболочке, см. Раздел« ОГРАНИЧЕННЫЙ ОБОЛОЧКА »на странице руководства bash для более подробной информации. – 2010-10-27 19:23:43