Опубликован: 15.08.2003 | Уровень: для всех | Доступ: платный | ВУЗ: Российский государственный гуманитарный университет
Лекция 6:

Применение методов доступа HTTP в рамках программирования CGI-скриптов. Настройка HTTP-сервера для работы с CGI-скриптами

access.conf

Наиболее важной директивой в этом файле с точки зрения исполнения скриптов является Options. Она используется внутри контейнера Directory:

<Directory /usr/local/etc/httpd/htdocs>
	Options ExecCGI
	</Directory>

В данном случае для каталога /usr/local/etc/httpd/htdocs будет разрешено исполнение CGI-скриптов.

Скрипты для обработки нестандартных методов доступа

Для того, чтобы обработать метод доступа, отличный от GET или POST , необходимо выполнить несколько условий: подготовить скрипт для обработки данного метода, настроить сервер и определить соответствующие права доступа к каталогам, с которыми этот скрипт будет работать. Рассмотрим как это делается на примере обработки запроса по методу PUT.

Некоторые серверы , например IIS компании Microsoft, имеют встроенные модули для работы с методом PUT. Сервер Apache такого модуля в стандартной комплектации не имеет, но позволяет подключить скрипт для обработки запросов по методу PUT.

Сама программа обработки таких запросов может выглядеть следующим образом:

#!/usr/local/bin/perl
	if($ENV{REQUEST_METHOD} ne "PUT")
	{
	die "Content-type: text/plain\n\nМетод доступа не PUT";
	}
	$fname=$ENV{PATH_TRANSLATED};
	if(!$fname)
	{
	die "Content-type: text/plain\n\nНе указана мишень вывода";
	}
	$length=$ENV{CONTENT_LENGTH};
	if(!$length)
	{
	die "Content-type: text/plain\n\nСтраница имеет нулевой размер";
	}
	read(STDIN,$page,$length);
	open(OUT,">$fname");
	print OUT $page;
	close(OUT);
	print "Content-type: text/plain\n\nДанные получены.";
Листинг 24.1.

Первый оператор if проверяет метод доступа, второй — адрес страницы, которую следует разместить, третий — наличие самих данных для размещения по адресу страницы. Проверок для полной уверенности в передаче данных на самом деле нужно выполнить несколько больше. Кроме того, требуется сгенерировать код возврата и запись в журнал посещений, чтобы этот пример стал реально действующей программой. Теперь нужно настроить сервер . Для этого в файле конфигурации сервера httpd.conf следует указать:

Script PUT cgi-сценарий

Здесь cgi-сценарий — это имя нашего скрипта.

После этого для нашего сценария, а, точнее, для пользователя, от которого он запускается, нужно разрешить запись данных в каталог размещения страниц и, если это необходимо, внести изменения в файлы настройки процедуры аутентификации.

Скрипты и Server Side Includes

Стандартный модуль подстановок ( includes ) сервера Apache позволяет задействовать CGI-скрипты для генерации подстановок. Скрипт, в отличие от обычной программы, наследует переменные окружения , которые генерирует сервер для CGI-скриптов, а не стандартный набор переменных окружения оболочки ( shell ).

<!--#exec cgi="/cgi-bin/include.cgi" -->

В данном случае мы вставили в документ результат работы скрипта include.cgi.

Вставку можно использовать и не для генерации части текста документа, а для анализа данных, передаваемых в страницу или для анализа переменных окружения CGI-скрипта, т.е. условий обращения к странице. Например, для анализа IP-адреса пользователя и условного перенаправления запроса.

Для того, чтобы сервер выполнил подстановки в файл srm.conf, нужно внести строку определения типа документов, подлежащих разбору ( server parsed documents ):

AddType text/x-server-parsed-html .shtml

Расширение файла *.shtml обычно используется для документов, требующих анализа их содержания на предмет выполнения подстановок. Если администратор желает распространить предварительный анализ содержания документов на все документы, то вместо или в дополнение к .shtml можно указать и .html.

Кроме того, для каталога (файл access.conf — общий файл конфигурации доступа или .htaccess — файл конфигурации доступа, расположенный в данном каталоге и переопределяющий правила доступа), в котором расположены документы в директиве Options, должны быть разрешены и подстановки, и исполнение CGI-скриптов:

<Directory /usr/local/etc/httpd/htdocs>
	AllowOverride
	Options Includes ExecCGI
	</Directory>

В данном случае для домашнего каталога документов сервера Apache, который используется в настройках по умолчанию, разрешено переопределять опции доступа в подкаталогах ( AllowOverride ) и исполнять подстановки и скрипты ( Options Includes ExecCGI ). По умолчанию обычно используют вместо последних двух опций одну — All. Она тоже разрешает подстановки и выполнение скриптов, а также ряд других действий:

<Directory /usr/local/etc/httpd/htdocs>
	AllowOverride
	Options All
	</Directory>

Вообще говоря, существует возможность разрешить подстановки, но запретить выполнение скриптов:

<Directory /usr/local/etc/httpd/htdocs>
	AllowOverride
	Options IncludesNoExec
	</Directory>

В этом случае отключаются не только скрипты, но и обычные команды, выполняемые из стандартной оболочки ( shell ). При этом можно разрешить исполнение скриптов самих по себе, но не в качестве вставок.

<Directory /usr/local/etc/httpd/htdocs>
	AllowOverride
	Options IncludesNoExec ExecCGI
	</Directory>

В данной конфигурации исполнение скриптов разрешено, а выполнение подстановки по команде exec запрещено.

Екатерина Cколова
Екатерина Cколова
Россия, Москва
Dima Semenchenok
Dima Semenchenok
Россия