Безопасное программирование на Perl
Категория реферата: Рефераты по информатике, программированию
Теги реферата: курсовик, антикризисное управление предприятием
Добавил(а) на сайт: Jamzin.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата
Такая маска позволит выделить адрес в форме "кому@куда", где элементы "кому" и "куда" могут включать литеры, точки и тире. Более того, "кому" не может начинаться с тире, используемого во многих программах как служебный символ командной строки.
Я удаляю метасимволы из переменной, но Perl продолжает думать, что она заражена!
Смотри выше ответ на этот вопрос. Единственный способ обеззаразить переменную - применить поиск по маске.
Действительно ли небезопасна операция поиска $foo=~/$user_variable/?
Часто задача скрипта CGI на Perl состоит в получении от пользователя списка ключевых слов и использования их в операциях поиска по маске для нахождения совпадающих имен файлов (или чего - нибудь в этом роде). Само по себе это не опасно. Опасна оптимизация, которую некоторые программы Perl используют для ускорения поиска. При использовании переменной в операции поиска, выражение компилируется всякий раз при выполнении операции. Для избежания перекомпилирования, занимающего время, можно использовать специальный флаг - o, что приведет к тому, что выражение будет откомпилировано только однажды:
foreach (@files) {
m/$user_pattern/o;
}
Теперь, однако, Perl будет игнорировать любые изменения в переменной, что приведет к неправильной работе циклов такого рода:
foreach $user_pattern (@user_patterns) {
foreach (@files) {
print if m/$user_pattern/o;
}
}
Для обхода этой проблемы программисты, пишущие на Perl, часто используют такой трюк:
foreach $user_pattern (@user_patterns) {
eval "foreach (@files) { print if m/$user_pattern/o; }";
}
Проблема здесь состоит в том, что в операторе eval() используется пользовательская переменная. Если переменная не подвергается тщательной проверке, то можно заставить eval() выполнить произвольный код на Perl. Для понимания того, чем это грозит, подумайте, что произойдет в случае, если переменная будет иметь следующее значение: "/; system 'rm *'; /"
Проверки заразности (см. выше) позволяют поймать потенциальную опасность в этой области. Вы можете выбирать между отказом от такого рода оптимизации, или тщательным обеззараживанием переменной перед использованием. Полезная возможность в Perl5 состоит в использовании Q и E для комментирования метасимволов так, чтобы они не были использованы:
print if m/Q$user_patternE/o;
Мой скрипт CGI требует большие привелегии, чем он получает как пользователь nobody. Как мне изменить идентификатор пользователя?
Прежде всего, действительно ли это необходимо? Предоставление больших прав увеличивает риск и позволяет взломанному скрипту нанести больше вреда. Если вы хотите предоставить скрипту права пользователя root, то сперва ОЧЕНЬ хорошо подумайте.
Вы можете заставить скрипт выполняться с правами его владельца путем установки бита s:
chmod u+s foo.pl
Рекомендуем скачать другие рефераты по теме: большие рефераты, онлайн решебник.
Предыдущая страница реферата | 1 2 3 4 | Следующая страница реферата