Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение Perl скриптов с параметрами на хостере. 
:(
    Опции темы
FlyBird
Дата 15.4.2007, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Здравствуйте!
Скрипты проходят отладку на 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




PM MAIL   Вверх
JAPH
Дата 15.4.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23




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



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
FlyBird
Дата 16.4.2007, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
JAPH
Дата 16.4.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



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



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
FlyBird
Дата 18.4.2007, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Судя по строке, которую Вы дали поможет избавиться от ошибки в логах от Apache, вопрос в том куда ее вставить?
PM MAIL   Вверх
amg
Дата 18.4.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



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

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

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


Это сообщение отредактировал(а) amg - 18.4.2007, 10:56
PM MAIL   Вверх
FlyBird
Дата 18.4.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



(amg) Этот шаг отработали, и это далеко не глупость, важна каждая мелочь. Смотрим через FAR программу скачанные скрпиты, в программе просмотра все отражается верно! Если капнуть немного вглубь, то какие права должны быть установлены и на папку /cgi-bin/ и на сам скрпит? Мы установили рекомендуемые авторами многих книг - это 755.
PM MAIL   Вверх
JAPH
Дата 18.4.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



Цитата
куда ее вставить


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

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


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


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
FlyBird
Дата 19.4.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Всем спасибо за обсуждение и помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.