ЖУРНАЛ ХАКЕР

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;

Назад на стр. 002-068-3  Содержание  Вперед на стр. 002-068-5