CGI - Common Gateway Interface
Спецвыпуск хакер, номер #002, стр. 002-068-4
read(STDIN, $data, $ENV{"CONTENT_LENGTH"});
}
@_ = split /&/, $data;
foreach (@_) {
tr/+/ /;
s/%(..)/pack("c",hex($1))/ge;
($key, $value) = split /=/, $_;
$params{lc $key} = $value;
}
}
После отработки этого фрагмента в $params {имя параметра} будет стоять соответственное значение. Если в урле просто указать имя параметра, не указывая значения, то наличие такого параметра можно проверить так:
if (exists $params{имя параметра}) {
такой параметр есть.
}
else {
не задан
}
Исходник одинаково хорошо скушает и GET-метод (применяемый для кодировки введенных урлов), и POST-метод (которым обычно пользуются, когда отправляют данные, полученные из форм - см. HTML тэг <form>). Здесь, в методе POST, используется уже описанное мной чтение параметров с помощью read:
read(STDIN, $data, $ENV{"CONTENT_LENGTH"});
Доступ ко всем переменным окружения в Perl`е можно получать из $ENV{имя переменной окружения}. Чтобы узнать, какие вообще переменные установлены - имеют значения, достаточно запустить скрипт:
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
for (keys %ENV) {
print "$_ = ${ENV{$_}}\n";
}
Как я уже говорил, с помощью переменных окружения можно узнать многое - только на пароли на Инет не рассчитывай. ;-) Например, если кто-то зашел на страничку, можно узнать его IP-шник - достаточно посмотреть на содержимое ENV{"REMOTE_ADDR"}. А если он, редиска, заюзал прокси, то можно попытаться определить, какой - смотри $ENV{"HTTP_VIA"} (некоторые прокси еще добавляют строчку ",via [proxyaddr]" к $ENV{"HTTP_USER_AGENT"}. А если прокси не анонимный, то можно и IP похакать - $ENV{"HTTP_X_FORWARDED_FOR"}.
Тестирование скриптов
После того как скрипт написан, его бы надо опробовать - но лезть каждый раз в Инет, качать его на сервер, запускать оттуда... Мягко говоря, неудобно. Но есть способ лучше! (с) Твикс - две палочки хрустящих тампонов Тампакс! :-) Можно поставить себе свой маленький веб-сервер, который не будет иметь доступа в Инет, а будет лишь сподручным средством, позволяющим быстренько (не отходя от кассы) :-) проверить скрипт. Я советую поставить Apache 1.3.6 - он наиболее устойчивый (у меня за почти полгода не упал ни разу) и ставится буквально за 20 минут. Доку про то, что и где крутить и откуда качать, можно взять на www.apache.ru.
Кроме установки веб-сервера есть также и специальные программы, которые это дело эмулируют, подготавливая переменные окружения и запросы. Но это уже изврат. :-)
Примеры
Замечательные скрипты можно взять со множества сайтов совершенно бесплатно - примером может служить www.scripts.com. Там можно найти и гостевые книги, и чаты, и много чего еще практически на всех популярных ныне в народе языках программирования. Там есть даже примеры на командном языке юнихового шелла. :-o
Вот парочка примеров, взятых оттуда:
ГОСТЕВАЯ КНИГА:
XXXXXXXXXXXXXXXXXXXXXXXXX
#!/usr//bin/perl
use Fcntl;
use CGI;
use AnyDBM_File;
use FreezeThaw qw(freeze thaw);
my $page = CGI->new;
my %comments;
umask 0;
my $file = $page->param('file') || 'guest';
tie %comments, "AnyDBM_File", $file, O_RDWR | O_CREAT, 0777;