Персональные CGI - Ваши скрипты на Perl и других языках
Разрешено выполнять CGI-скрипты без предварительной верификации нашим техническим персоналом. Вы сами можете писать скрипты и выкладывать их на Вашу площадку.
Cgi могут быть в виде скриптов на perl5 или выполняемых программ для архитектуры i386 и операционной системы FreeBSD.
Учтите, что скрипт работает под Вашими правами, поэтому неправильно написанный cgi-скрипт может привести к уничтожению или замене содержимого Вашего сервера. Мы не несем никакой ответственности за ошибки в написанных Вами cgi-скриптах.
Мы даем выполнять cgi скрипты без предварительной верификации. Однако мы выдвигаем требование, чтобы программы работали правильно и не пытались занять все ресурсы сервера.
Мы предпринимаем ряд мер, обеспечивающих стабильность машины, на котором размещены виртуальные сервера. Каждая запущенная задача имеет ограничения по процессорному времени и по памяти. Так же существует ограничение по количеству задач запущенных одним пользователем. Мы постоянно контролируем эти ограничения. По мере необходимости мы увеличиваем мощность базового сервера и расширяем лимиты.
Адекватно работающие скрипты, правильно написанные и соблюдающию идеологию WWW, не испытывают никаких проблем, и никогда не достигают установленных ограничений.
В соответствии с идеологией WWW, cgi скрипты не должны делать активных вычислений и прочей трудоемкой работы во время выдачи ответа конечному пользователю. Постарайтесь, чтобы скрипты отрабатывались быстро. Всю сложную работу лучше выполнять отдельно, запуская из shell различного рода обработчики и индексаторы. В противном случае нетерпеливый клиент может в десятки раз увеличить загрузку машины быстро нажимая "reload".
Будьте бдительны, не допускайте явных ошибок. Тщательно верифицируйте получаемые данные. Учтите, что хакер постарается ввести не те данные, которые вы ждете, а те, которые ему могут помочь получить доступ к Вашему серверу. Никогда не используйте полученные данные как имя файла или каталога. Проверяйте конструкции типа [file="../../../index.html"]
Скрипты должны лежать в подкаталоге vcgi в Вашей домашней директории. Права на скрипт должны быть rwxr-x--- (750), т.е. это исполняемый файл, доступный на запись только для его владельца.
Если Вы создаете поддиректории, то у них должны быть аналогичные права. Скрипты с неправильными правами или лежащие в директориях с неправильными правами, работать не будут.
Обращаться к своим скриптам нужно по схеме /cgi-bin/your-cgi.pl
В ряде скриптов необходимо указывать директорию в которой лежат рабочие файлы. Указывайте пути относительно vcgi директории. Именно она является текущей при выполнении скрипта. Пример:
#D1E5FCasedir="../data";
Русский язык, кодировка
Расширение скрипта должно быть .pl. В этом случае перекодирующий сервер правильно выдаст charset.
Для неперекодирующего сервера нужно самостоятельно поставить charset: windows-1251
Образец скрипта:
#!/usr/local/bin/perl
print "Content-type: text/html";
if ( (!($ENV{"SERVER_SOFTWARE"} =~ /rus/))) {
print ";charset=windows-1251";
}
print "\n\n";
print "<HTML>";
while (($key,$val) = each %ENV) {
print "$key = $val<br>";
}
Сохраните этот текст в файл, положите в свою cgi директорию, поставьте правильные права ( chmod 750 file) и попробуйте его в работе.
Где лежит perl?
#!/usr/local/bin/perl - perl5
в директории /usr/local/perl/lib лежат модули для perl5.
Как правильно загружать скрипты на сервер?
Скрипты на языке Perl представляют из себя текстовые файлы. Если для загрузки скриптов Вы пользуетесь FTP-клиентом, необходимо контролировать режим, в котором на сервер загружаются такие данные. Текстовые файлы нужно загружать в текстовом (ASCII) режиме. Еще бывает двоичный (BINARY) режим работы FTP. Скрипты, загруженные в двоичном режиме, работать не будут.
Где находится sendmail и как правильно его вызывать?
Sendmail находится здесь:
/usr/sbin/sendmail
Обратите внимание на то, что вызов sendmail для отправки почты из скриптов нужно производить с параметром -f и далее указывать отправителя, а если нужно и получателя сообщения. Это позволит почтовым серверам правильно обрабатывать сообщения об ошибках, которые могут возникнуть при доставке созданного скриптом письма.
По стандарту поле Return-path в каждом почтовом сообщении помогает почтовым серверам определять, кто же на самом деле является отправителем сообщения. Уведомления об ошибках отправляются именно на адрес, указанный в поле Return-path. Опция -f позволяет явно указать что за адрес в результате окажется в заголовке созданного письма в поле Return-path. Поле From Вы, как обычно, создаете прямо в скрипте.
Пример программы на языке perl :
#!/usr/local/bin/perl
open MAIL,"|/usr/sbin/sendmail -f devnull\@aha.ru -t" || die "Cannot open sendmail - $|";
print MAIL "From: test\@aha.ru\nTo: devnull\@aha.ru\nSubject: test\n\nThis is a body";
close MAIL;
Отладка CGI скриптов
Зайдите в unix shell. Сделайте shell скрипт примерно такого содержания:
#!/bin/sh
QUERY_STRING="все что бывает после ?"; export QUERY_STRING
PATH_INFO="все что бывает после /"; export PATH_INFO
HTTP_USER_AGENT="Mozilla"; export HTTP_USER_AGENT
#any other vars used in script ; export it
cd vcgi
/usr/local/bin/perl -d your.script.pl < ~/file_with_POST_data
-d запускает perl debugger. Если он не нужен, уберите этот ключ.
Если Вам не нужно проверять POST, то < ~/file_with_POST_data можно опустить.
Вообще, старайтесь проверять скрипты перед тем, как помещать на веб-сервер. Если в скрипте есть ошибки, то, запустив скрипт в unix shell, Вы сможете увидеть что конкретно "не нравится" интерпретатору perl. Если скрипт работает в shell, но не работает при запуске через web, выдавая 'internal server error 500', посмотрите в файл error_log, который есть в Вашем домашнем каталоге. Стоит отметить, что файл этот будет появляться только в том случае, если Вы включили соответствующую опцию в Панели управления. Web-сервер пишет в error_log сообщения об ошибках, которые возникают при его работе.