Можно отсортировать - выполняют то, что Вы хотите использовать xargs, открытый для гнома, и простой сценарий для фильтрации текста так, чтобы запаздывающие осколки были удалены. В основном Вы могли сделать что-то вроде:
скомпилируйте | filtererrors | xargs открытый для гнома
Конечно, необходимо было бы записать собственную "filtererrors" программу, но это не должно быть слишком твердо. Просто читайте в каждой строке. Найдите первый индекс ':', и затем распечатайте строку до и, исключая тот индекс.
Я думаю, что реальный риск состоит в том при смешивании входа от пользователя в один из них exec()
. Это - то, где большая часть риска вошла бы, так как Вы позволяете пользователям давать Вам вход, который при смешивании в CLI может сделать опасные вещи, те, которые вставляют точки с запятой (;
) в текстовое поле и выполненные дополнительные команды после того, как они обеспечили аргументы.
Таким образом в общих рабочих командах способом только для чтения больше не был должен опасный, чем выполнение чего-то еще.
Это - в основном та же проблема как с атакой с использованием кода на SQL, с которой Вы могли бы быть более знакомы.
Насколько я знаю (и я не программист действительно, так возьмите его с щепоткой соли), exec()
вызовы не являются злыми вообще. Это просто, что они разветвляют новый процесс и имеют высокие издержки, так как Вы называете системную функцию. Обычно люди предлагают, чтобы Вы сделали вещи внутренне в любой программе/сценарии, которую Вы пишете и избегаете внешних вызовов как exec()
.
Однако, если Ваша цель состоит в том, чтобы выполнить команды в системе, нет никакого способа сделать ее без такого вызова. Конечно, существуют угрозы безопасности, разрешение случайных пользователей выполнить произвольные команды на Вашем сервере приглашает проблему. Однако, если доступ к этому серверу сильно ограничивается, необходимо смочь сделать это безопасно.
Так или иначе, основное заключение, exec()
функции не по сути плохи, они просто имеют тенденцию быть менее эффективными, чем выполнение чего-то внутренне.
exec()
был бы вектор атаки. Выполнение сервера под achroot'd
каталог был бы одним способом ограничить Ваше воздействие также. – slm♦ 12.10.2013, 22:30