Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Выполнение Perl скриптов с параметрами на хостере.


Автор: FlyBird 15.4.2007, 07:27
Здравствуйте!
Скрипты проходят отладку на localhost, все отлажено и все работает, система XP. После отладки скрипты выкладываются на сервер хостера. Вот там проблема. На папку хостера /cgi-bin/ установлены права 755, на все скрипты так же 755. При попытке запуска скрипта сервер хостера выдает ошибку
[XXXX] [error] fopen: Permission denied, referer: http://xx.ru/
[XXXX] [error] Premature end of script headers: price.pl, referer: http://xx.ru/
[XXXX] [error] unable to include "/cgi-bin/price.pl?mode=price" in parsed file /var/www/html/xx.ru/site/prices/index.shtml, referer: http://xx.ru/
(реальный адрес сервера подменен, чтобы не казалось рекламой или спамом)
После долгих разбирательств со скриптами, мне все-таки удалось их запустить указав в строке #!/usr/bin/perl ключ -t, т.е. в начале скрипта пишем:
#!/usr/bin/perl -t
Скрипт стал выполняться как и задумано, но в логах по Apache теперь регистрируется другая ошибка следующего содержания, причем для разных скриптов она меняется, например для обычного счетчика регистрируется такая:
[XXXX] [error] [client 81.19.66.38] Insecure dependency in open while running with -t switch at count01.pl line 41.
для скрипта работающего с SQL базой данных такая(все последующие строчки регистрируются сразу за одно нажатие мышкой):
[XXXX] [error] [client 213.180.216.11] [Sat Apr 14 12:21:57 2007] price.pl: Insecure dependency in require while running with -t switch at price.pl line 20.
[XXXX] [error] [client 213.180.216.11] [Sat Apr 14 12:21:57 2007] price.pl: Insecure dependency in require while running with -t switch at (eval 8) line 3.
[XXXX] [error] [client 213.180.216.11] [Sat Apr 14 12:21:58 2007] price.pl: Insecure dependency in require while running with -t switch at /usr/lib/perl5/5.8.5/AutoLoader.pm line 92 during global destruction.
Можно что либо предпринять, чтобы ошибок при выполнении скриптов не было? Спасибоsmile




Автор: JAPH 15.4.2007, 09:19

Ключ -T помечает все данные, пришедшие извне - %ENV, <STDIN> - как неблагонадёжные. Поэтому запрещается выполнять с ними некоторые операции (вроде open, exec). Для их очистки (снятия статуса неблагонадёжных) нужно проверять их регулярными выражениями.
Подробнее - perldoc perlsec.
Был бы скрипт - может, рассуждения были поконкретнее.

Автор: FlyBird 16.4.2007, 05:48
Спасибо, за оперативный ответ. Но вопрос стоял несколько иначе. В данной задаче не стоит проверять данные на загрязнение, вопрос в том почему без ключа -t не работет, а с ключом все-таки скрипт запускается. Возможно, я несколько неправильно задал вопрос (не в ту ветку), ведь здесь стыкуются две большие программы это Perl и Apache, причем Apache хостера, где не стоит XP, а присутсвует специализированная система. На localhost лог. Apache - чистый, без каких-либо ошибок, а вот лог Apache на хостере имеет описанные мной ошибки в различных вариантах (как должно быть и как есть на самом деле) посте первом. 
Собственно вопрос и заключался в том, где что неправильно настроено(либо хостером или нами) и можно ли это поправить?

Автор: JAPH 16.4.2007, 12:22
Скорее хостером, чем нами. И не неправильно - taint mode специально для безопасности создавался.
Поправить настройки хостер вряд ли даст, а вот обойти запросто:
Код
$tainted =~ /(.*)/s; $tainted = $1;

Автор: FlyBird 18.4.2007, 07:34
Судя по строке, которую Вы дали поможет избавиться от ошибки в логах от Apache, вопрос в том куда ее вставить?

Автор: amg 18.4.2007, 10:14
Возможно, глупость скажу, но может дело в неправильных концах строк? Если загрузить скрипт с винды на линуховый сервер, например, по FTP в бинарной моде, то первая строка будет не "#!/usr/bin/perl", а "#!/usr/bin/perl\r", а такого интерпретера, естественно, нет. При редактировании 1-й строки символ "\r" мог быть затерт, скрипт стал исполняться, но появилась ругань на несекьюрность (из-за -t).

На всякий случай, избавиться от "\r" можно командой (в командной строке linux)
Код

perl -i -pe 's/\r$//' script.pl

Автор: FlyBird 18.4.2007, 19:30
(amg) Этот шаг отработали, и это далеко не глупость, важна каждая мелочь. Смотрим через FAR программу скачанные скрпиты, в программе просмотра все отражается верно! Если капнуть немного вглубь, то какие права должны быть установлены и на папку /cgi-bin/ и на сам скрпит? Мы установили рекомендуемые авторами многих книг - это 755.

Автор: JAPH 18.4.2007, 20:04
Цитата
куда ее вставить


Ну, допустим, получаете вы данные из ненадёжного источника:
Код

my $var = $cgi -> param('var'); # Сейчас $var грязная
# Сразу же
$var = ($var =~ /(.*)/s)[0]; # А сейчас чистая


Теперь с ней можно делать всё, что угодно, perl считает, что всё безопасно, нет unsecure dependency.
Хотя по идее, проверка в регвыре должна быть намного более осмысленна.

Автор: FlyBird 19.4.2007, 17:10
Всем спасибо за обсуждение и помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)