PERL

Practical Extraction and Report Language —
«практический язык для извлечения данных и составления отчётов»

Листинг 41

Примеры, показывающие бесполезность фильтрации символов интерполяции строк.

Замена имен функций на результаты их работы в пользовательском вводе не были выполнены. Дело в том, что заключена введенная строка в двойные кавычки или нет, она всегда будет на экране отображаться одинаково, без всяких там изменений. Фильтрация символов интерполяции не нужна – толк от их использования ровным счетом никакой.

В документации по языку программирования Perl говорится, что строчка, взятая в обратные кавычки ("`") как правило, интерпретирует как команды ОС, которой они передаются для выполнения. Это работает только к строкам текста программ, но не к содержанию скалярных переменных. Например, "$a=`type /etc/passwd`;" занесет в установленную переменную $a содержимое файла "/etc/passwd", однако "$a=<>;" несмотря на то что пользователь введет, не приведет к такому результату. В итоге, символ "`" не несет в себе угрозу и не имеет смысла подвергать его фильтрации.

Большие проблемы возникают с вызовами внешних программ, работающих с самими данными, введенных пользователями. Основная проблема состоит в невозможности определить какие символы представляют опасность, а какие наоборот безобидные. Множество приложений кроме документированных функций, содержат и недокументированные особенности или ошибки реализации.

Составить список фильтруемых символов представляет проблему, так как неизвестно как себя поведет приложения, столкнувшись с тем или иным набором комбинаций символов. Вполне возможно столкновение с автоматическим развертыванием UUE–сообщений.

Как вариант, отказаться от вызова внешних программ, делая все своими силами. Процедура отправки писем можно выполнить используя возможности Perl, без обращения к MTRA или SendMail'у. Кроме того файлы стоит искать не с помощью вызова grep, а самостоятельно разработанным модулем. Усложнение программного обеспечения увеличивает ее безопасность, а главное надежность.

Фильтрацию ввода необходимо осуществлять на серверной, но не на клиентской части. Довольно часто эту процедуру передают Java-скриптам или Java-апппетам, не задумываясь, что их могут модифицировать или заблокировать злоумышленники, так как работают на их машинах и невозможно отличить запросы, посланные Java-скриптами от запросов, посланных злоумышленниками в обход скриптов. Java подходит только для скорейшего уведомления клиентов об ошибках ввода.

Главная

Perl-скрипты

Android

Карта сайта