Россия |
Применение методов доступа 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 запрещено.