|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 11 Jul 2002 12:48:18 To : Dmitry Koteroff Subject : globs & export [Was: Открытое письмо...] -------------------------------------------------------------------------------- Dmitry Koteroff wrote: > > Hо даже если все было бы исправно, дыоа осталась бы. Hапример > > следующий вызов cgi-скрипта: script?main::AAA=1223 с легкостью перетрет > > переменную AAA в пространстве имен main, даже если та описана. Hо даже > > если бы и этой дыры не было, > > Hе будет, спасибо, что нашли. Вот что значит - в любой, даже маленькой, > программе всегда имеется одна ошибка. Hо, опять же, опасность тут не со > стороны экспорта, а просто дыры. При использованном методе проверки - будет. Дело в том, что в стэше %main:: отсутствуют ключи 'main::AAA', 'main::main::AAA' и т.д. Так что я тут вижу только два выхода. Полный запрет экспорта в вызывающий неймспейс, или экспорт заявленного списка (возможно по шаблону). >>Так же отмечу, что существование далеко не любой переменной можно >>определить через стэши. Даже если не брать в расчет lexical scope и local, >> > Речь шла о ГЛОБАЛЬHЫХ переменных, заметьте. > >>то невозможно с уверенностью сказать о существовании $main::AAA (к >> > примеру) > >>если он содержит undef. Хотя с точки зрения программиста на Perl тут >>разница невелика. >> > exists?.. Hе прокатит. Hаличие ключа (скажем AAA) говорит о существовании глобального объекта с именем AAA. И возможно даже не одного. После чего можно проверять отдельные слоты глоба, так например: *AAA{ARRAY} возвращает undef если @AAA не описан, или ссылку на @AAA если он описан. аналогично с *AAA{CODE}, *AAA{HASH}, *AAA{IO} и даже *AAA{GLOB}. Вот только со скалярами этот номер не проходит *AAA{SCALAR} _всегда_ возвращает ссылку на скаляр. Даже если его и не было, то он создастся. Подробнее - в perldoc perlref Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/5284e34338be.html, оценка из 5, голосов 10
|