Практика применения скриптов CGI



Применение скриптов широко практикуется в WWW. При их помощи, например, реализованы стеки графических гипертекстовых ссылок, встраивание даты в текст документов, встраивание ответов службы finger, доступ к базам данных и многое другое. Мы рассмотрим простейшие скрипты для распечатки параметров,передаваемых сервером, скрипты по обращению к shell, С-скрипты, скрипты доступа к системе управления базами данных Ingres и скрипт imagemap.

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

#!/bin/sh

echo Content-type: text/plain

echo

echo This is the result of script execution

#The end of script

Первая строка определяет, что в качестве интерпретатора скрипта будет использован shell, вторая строка открывает заголовок сообщения, передаваемого скриптом серверу, и определяет тип передаваемой информации как обычный текст. Третья строка отделяет тело сообщения от его заголовка. В теле сообщения передается фраза из четвертой строки. Именно она и будет отображаться программой-интерфейсом пользователя.

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

# I /bin/sh

echo Content-type: text/plain

echo

echo $REQUEST_METHOD

echo $QUERY_STRING

echo $CONTENT_TYPE

echo $CONTEN1_LENGTH

#The end of script.

В данном скрипте пользователю будут возвращены значения указанных в строках команды echo переменных окружения.

Пользователю можно вернуть не только значения переменных окружения, но результаты выполнения команд.

#!/bin/sh

echo Content-type: text/plain

echo

finger paul@polyn.kiae.su

#The end of script.

В результате выполнения этого cкрипта пользователь получит информацию о пользователе paul с машины polyn.kiae.su.

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

Доступ к базе данных под управлением Ingres.Система управления базами данных Ingres является одной из популярных СУБД, работающих в среде операционной системы UNIX. Использование технологии разработки CGI-скриптов помогает построить современный дружественный интерфейс для пользователей WWW к базам данных под управлением данной СУБД. Начнем обсуждение этой возможности с простейших способов обращения с СУБД.

#!/bn/sh

echo Content-type: text/plain

echo

Ingres polyn < query

#The end of script

В данном случае запрос заранее подготовлен в виде слайда query. Скрипт не получает данных из интерфейсной программы и действует по жесткой схеме запроса. Аналогично можно вызвать скрипт, выполняющий утилиты Ingres:

#!/bin/sh

echo Content-type: text/plain

helpr polyn

#The end of script

В данном случае скрипт возвращает справку по базе данных polyn.

Естественно, что можно использовать не только тип text/plain,но и text/ html. Пример такого использования приведен ниже:

#!/bin/sh

echo Content-type: text/html

echo

echo '<pre> '

helpr polyn situat

echo '</pre> '

#The end of script

Выполнение жестких запросов не очень интересно для пользователя. Он обычно жаждет сформулировать свой запрос. В следующем примере скрипту передается запрос методом доступа GET, который помещен в переменную окружения QUERY_ STRING:

#!/bin/sh

echo Content-type: text/html

echo

echo '<pre>'

echo $QUERY_STRING I tr "+" "" I ingres polyn

echo '<pre>'

#The end of script

Прежде всего данные посылаются на предобработку, т.к. все пробелы в запросе заменяются на знак "+" в соответствии с правилами HTTP. После этого фильтра данные поступают на стандартный ввод интерпретатора Ingres и результат работы возвращается пользователю.

Вообще говоря, необходима филь- трация и на выходе после Ingres, т.к. вывод содержит неотображаемые символы, например символ '/007', который лучше заменить на что-то отображаемое.

Отчеты могут быть достаточно большими, поэтому имеет смысл ограничить отчет определенным числом строк:

#!/bin/sh

echo Content-type: text/html

echo

echo '<pre>'

echo $QUERY_STRING I sed -f symbols I ingres polyn I tr"/007" "*" I

head 100

echo '<pre>'

#The end of script

В данном случае размер отчета ограничен 100 записями. В качестве фильтра используется sed, который выполняет правильное преобразование символов из формата HTTP в обычный ASCII. При формировании файла symbols (правила преобразования) следует помнить о порядке выполнения правил преобразования.

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

Работа со скриптом imagemap. Скрипт imagemap был разработан для организации доступа к документам по графическим гипертекстовым ссылкам. В общем случае это означает, что в тексте HTML-документа встроена картинка. Данная картинка разбита на непересекающиеся области различной формы, обычно круги, прямоугольники или полигоны. С каждой из этих областей связан какой-либо объект. Выбирая мышью точку на этой картине, пользователь выбирает объект, связанный с областью, которой принадлежит точка объекта и переходит к просмотру этого объекта. Например, на экране пользователя отображена европейская часть территории Союза с административными границами республик. Выбирая точку внутри административных границ России, можно получить укрупненную карту европейской части России.

Некоторые HTTP-серверы реализуют функции imagemap самостоятельно, но чаще всего в Сети используют отдельный скрипт. Рассмотрим применениеданного скрипта для сервера NCSA. Программа imagemap размещается в директории скриптов, обычно это "/usr/local/etc/httpd/cgi-bin". В директории "/usr/local/etc/httpd/conf" размещается файл конфигурации скрипта. Для каждой картинки создается еще и файл разбиения картинки на области, адрес которого указывается в конфигурации скрипта.

Для организации стека графических ссылок в документе HTML используют следующую конструкцию:

<A HREF="http://polyn.net.kiae.su/cgi-bin/imagemap/russia">

<IMG SRC="http://demin.polyn.kiae.su/dss/russia.gif" ISMAP>

</A>

Таким образом, URL скрипта imagemap в качестве последнего компонента пути содержит аргумент, в данном случае "russia". При использовании этой гипертекстовой ссылки программа-клиент добавляет после слова "russia" последовательность типа 114,25. Первая цифра определяет координату Х на картинке относительно левого ее края, а вторая цифра - координату Y относительно верхнего края картинки. При вызове скрипт ищет свой файл конфигурации, который имеет вид:

# метка : адрес файла описания картинки

russia : /usr/local/etc/httpd/cgi-bin/maps/russia.map

brussia : /usr/local/etc/httpd/cgi-bin/maps/brussia.map

...

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

# описание прямоугольника

rect 10 20 100 200

circle 50 50 60 60

poly 10 10 20 20 20 10

Практически все программы imagemap имеют ограничения на число вершин полигона, так для MS-Windows 3.1 ограничение равно 100 точкам.

Для разметки картинок используются специальные вспомогательные программы типа mapedit, которые позволяют сделать процесс разбивки картинки более наглядным и менее трудоемким.

Общей проблемой, связанной с использованием скриптов, является проблема безопасности. Во-первых, скрипты обычно не пишут сами, как, например, скрипт imagemap, а заимствуют. Понятно, что чужая программа может содержать ошибки. Поэтому лучше пользоваться библиотеками проверенных скриптов, которые рекомендованы, например World Wide Web Consortium. Во-вторых, если пользователю разрешено иметь свои страницы, то он может получить возможность выполнять свои скрипты на сервере, что тоже приводит к брешам в системе безопасности, особенно если это shell-скрипты. Существуют такие скрипты, которые требуют прав доступа к ресурсам машины. Эти права шире, чем права пользователя " nobody", например, при доступе к базам данных. Все эти моменты следует учитывать как при написании скриптов, так и при разрешении их использования различным группам пользователей.

Как правило, новые возможности WWW опробуются на скриптах, а затем, если эти возможности широко используются в практике, они включаются в стандарты различных компонентов системы и могут быть реализованы в новых возможностях серверов, как, например, imagemap и системы безопасности.


Дата добавления: 2018-04-05; просмотров: 218; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!