Безопасное программирование на Perl
Категория реферата: Рефераты по информатике, программированию
Теги реферата: курсовик, антикризисное управление предприятием
Добавил(а) на сайт: Jamzin.
1 2 3 4 | Следующая страница реферата
Безопасное программирование на Perl
Дмитрий Громов
Как избежать передачи пользовательских переменных оболочке ОС при вызове exec() и system()?
В Perl вы можете запускать внешние программы различными путями. Вы можете перехватывать вывод внешних программ, используя обратные кавычки:
$date = `/bin/date`;
Вы можете открывать "туннель" (pipe) к программе:
open (SORT, " | /usr/bin/sort | /usr/bin/uniq");
Вы можете запускать внешние программы и ждать окончания их выполнения через system():
system "/usr/bin/sort < foo.in";
или вы можете запускать внешние программы без возврата управления с помощью exec():
exec "/usr/bin/sort < foo.in";
Все эти выражения являются опасными если используют данные, введенные пользователем, которые могут содержать метасимволы. Для system() и exec() существует синтаксическая возможность, позволяющая запускать внешние программы напрямую, без обращения к оболочке ОС. Если вы передаете внешней программе аргументы, представляющие собой не строку, а список, то Perl не будет использовать оболочку, и метасимволы не вызовут нежелательных побочных эффектов. Например:
system "/usr/bin/sort","foo.in";
Вы можете использовать эту особенность для того, чтобы открыть туннель, не обращаясь к оболочке ОС. Вызывая open в магической последовательности символов |-, вы запускаете копию Perl и открываете туннель (pipe) к этой копии. Дочерняя копия Perl затем немедленно запускае внешнюю программу, используя список аргументов для exec().
open (SORT,"|-") || exec "/usr/bin/sort",$uservariable;
while $line (@lines) {
print SORT $line,"n";
}
close SORT;
Для чтения из туннеля без обращения к оболочке можно использовать похожий способ, с последовательностью -|:
open(GREP,"-|") || exec "/usr/bin/grep",$userpattern,$filename;
while () {
print "match: $_";
}
close GREP;
Это те формы open(), которые необходимо всегда использовать в случаях, когда в другой ситуации вы использовали бы перенаправление open (piped open).
Рекомендуем скачать другие рефераты по теме: большие рефераты, онлайн решебник.
1 2 3 4 | Следующая страница реферата