3.5.7.2. Практика применения скриптов 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, вторая строка открывает заголовок сообщения, передаваемого скриптом серверу, и определяет тип передаваемой информации как обычный текст. Третья строка отделяет тело сообщения от его заголовка. В теле сообщения передается фраза из четвертой строки. Именно она и будет отображаться программой-интерфейсом пользователя.
В качестве следующего примера приведем скрипт, который отображает значения переменных окружения:
#!/bin/sh
echo Content-type: text/plain
echo
echo $REQUEST_METHOD
echo $QUERY_STRING
echo $CONTENT_TYPE
echo $CONTENT_LENGTH
#The end of script.
В данном скрипте пользователю будут возвращены значения указанных в строках команды echo переменных окружения.
Пользователю можно вернуть не только значения переменных окружения, но и результаты выполнения команд.
#!/bin/sh
echo Content-type: text/plain
echo
finger paul@polyn.kiae.su
#The end of script.
В результате выполнения этого скрипта пользователь получит информацию о пользователе paul с машины polyn.kiae.su.
Завершим обзор простейших скриптов небольшой программой на С:
#include <stdlib.h>;
#include <sys/types.h>;
main()
{
long i,n,uid;
char input_ch[1024];
char *env;
env = getenv("CONTENT_LENGTH"); /* Here we recieve a length */
sscanf(env,"%d",&n); /* of input stream and form */
for(i=0;i<;n;i++) /* command line */
{ input_ch[i] = getchar(); }
input_ch[i] = '\000';
printf("Content-type: text/html\n\n"); /* First message of a CGI Programme */
/* This message must be a first one */
/* in output sream. */
printf("<TITLE> Cgi script.(example#1)</TITLE>\n");
printf("<H3><I> Russian Research Center \"Kurchatov Institute\"<I></H3>\n");
c_uid = -1;
sscanf(input_ch,"uid=%ld",&uid); /* Transform input data */
printf("Input Nuber:%ld.<BR><HR>",uid);
exit(0);
}
В приведенном выше примере программа получает данные через стандартный ввод. Это значит, что используется метод доступа POST. Число получаемых байтов указывается в переменной окружения CONTENT_LENGTH. Следует обратить внимание на то, что первой строкой записи в стандартный вывод является строка, определяющая тип информации. В данном случае он определен как текст HTML. Важно также отметить, что в этом операторе вывод завершается двумя переводами на новую строку, т.к. пустая строка должна разделять заголовок и тело сообщения, возвращаемого серверу. Остальные операторы выводят данные в виде HTML-предложений, формируя HTML-документ.
При написании скриптов следует учитывать то, что сервер обычно стартует в момент, когда не все пути могут быть определены, поэтому при обращении к ресурсам следует указывать полные пути для этих ресурсов.
Доступ к базе данных под управлением Ingres. Система управления базами данных Ingres является одной из популярных CУБД, работающих в среде операционной системы UNIX. Использование технологии разработки CGI-скриптов помогает построить современный дружественный интерфейс для пользователей WWW к базам данных под управлением данной СУБД. Начнем обсуждение этой возможности с простейших способов обращения с СУБД.
#!/bin/sh
echo Content-type: text/plain
echo
ingres polyn < query
#The end of script
В данном случае запрос заранее подготовлен в виде файла query. Скрипт не получает данных из интерфейсной программы, и действует по жесткой схеме запроса. Аналогично можно вызвать скрипт, выполняющий утилиты Ingres:
#!/bin/sh
echo Content-type: text/plain
echo
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 | tr "+" " " | 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 | sed -f symbols | ingres polyn | tr "\007" "*" | head 100
echo '< /PRE> '
#The end of script
В данном случае размер отчета ограничен 100 записями. Обратите внимание, в качестве фильтра используется sed, который выполняет правильное преобразование символов из формата HTTP в обычный ASCII. При формировании файла symbols (правила преобразования) следует помнить о порядке выполнения правил преобразования.
Одним из недостатков приведенных выше скриптов является невозможность или достаточно большая сложность преобразования выходной информации Ingres. Если необходимо получить отчет со встроенными в его текст ссылками и картинками, то лучше использовать универсальный язык программирования, например, С.
Программирование на С с использованием EQUEL (препроцессор для доступа к Ingres) позволяет аккуратно разобрать входные данные и построить сложный гипертекстовый отчет. На рисунке 3.29 приведен пример интерфейсной формы.
Рис. 3.29. Результат выполнения скрипта приведен на рисунке 3.30:
Рис. 3.30.
Работа со скриптом imagemap. Скрипт imagemap был разработан для организации доступа к документам по графическим гипертекстовым ссылкам. В общем случае это значит, что в текст HTML-документа встроена картинка. Данная картинка разбита на непересекающиеся области различной формы, обычно круги, прямоугольники или полигоны. С каждой из этих областей связан какой-либо объект (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" последовательность типа "?14,25". Первая цифра определяет координату X на картинке относительно левого ее края, а вторая цифра - координату 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 точкам.
Для разметки картинок используются специальные вспомогательные программы типа mape-dit, которые позволяют сделать процесс разбивки картинки более наглядным и менее трудоемким.
Общей проблемой, связанной с использованием скриптов, является проблема безопасности. Во-первых, скрипты обычно не пишут сами, как, например, скрипт imagemap, а заимствуют. Понятно, что чужая программа может содержать ошибки. Поэтому лучше пользоваться библиотеками проверенных скриптов, которые рекомендованы, например, World Wide Web Consortium. Во-вторых, если пользователю разрешено иметь свои страницы, то он может получить возможность выполнять свои скрипты на сервере, что тоже приводит к брешам в системе безопасности, особенно если это shell-скрипты. Существуют такие скрипты, которые требуют прав доступа к ресурсам машины. Эти права шире, чем права пользователя "nobody", например, при доступе к базам данных. Все эти моменты следует учитывать, как при написании скриптов, так и при разрешении использования различным группам пользователей.
Как правило, новые возможности WWW опробуются на скриптах, а затем, если эти возможности широко используются в практике, они включаются в стандарты различных компонентов системы и могут быть реализованы в новых возможностях серверов, как например imagemap и системы безопасности. Скрипты позволяют новым энтузиастам Сети приобщиться к сообществу и внести свою лепту в развитие системы.
- Администрирование в информационных системах
- Глава 1. Информационные процессы в системах управления. Цели, задачи и функции администрирования в информационных системах
- Глава 2. Программное и техническое обеспечение современных ис и технологий управления организацией
- Глава 3. Методология построения администрирования и его средства
- Глава 4. Обеспечение иб в администрировании ис
- Глава 5. Управление конфигурацией и ресурсами ис
- Глава 6. Сетевые службы и их мониторинг
- Глава 7. Управление пользователями, сетевыми службами, дисками, службой печати
- 1.Теория администрирования сетей tcp/ip
- 1.1. Организация сети tcp/ip
- 1.2. Межсетевой обмен в сетях tcp/ip
- 1.3. Основные протоколы стека tcp/ip
- IPing - новое поколение протоколов ip
- 1.4. Принципы построения ip-адресов
- 1.5. Подсети
- 1.6.Порты и сокеты
- 1.7.Основные принципы ip-маршрутизации
- 1.8.Информационные сервисы Internet
- 1.9 Система Доменных Имен
- 1.10 Электронная почта в Internet
- 1.11 Взаимодействие отдельных эвм друг с другом
- 1.12 Обмен файлами. Служба ftp
- 2. Администрирование сетей
- 2.1. Учетные записи и группы безопасности
- 2.1.1. Понятие пользовательской учетной записи
- 2.1.2.Встроенные пользовательские учетные записи Windows 2000/xp
- 2.1.3. Группы безопасности
- 2.1.4.Типы учетных записей
- 2.1.5. Встроенные группы безопасности
- 2.2. Администрирование файлов и папок
- 2.2.1. Режимы доступа к папкам
- 2.2.2. Права доступа
- 2.3.3 Права доступа при копировании (перемещении) файлов.
- 2.3. Сервисы сетей ncp/ip
- 2.3.1. Протокол динамической конфигурации клиентских машин
- Администрирование информационных систем Правила эксплуатации и ответственные за их соблюдение
- Проектирование информационных систем и их приемка
- Защита от вредоносного программного обеспечения
- Обслуживание систем
- Сетевое администрирование
- Защита носителей информации
- Обмен данными и программным обеспечением
- Проблема организации администрирования крупных информационных систем.
- Администрирование в информационных системах
- 1. Ведение. Основные проблемы администрирования сетей tcp/ip и информационных технологий Internet
- 1.1. Организация сети tcp/ip
- 1.2. Подключениe локальной или корпоративной сети к Internet
- 1.3. Маршрутизация в сетях tcp/ip
- 1.4. Система доменных имен
- 1.5. Обмен электронной почтой
- 1.6. Организация информационного обслуживания на основе технологий Internet
- 1.7. Проблемы безопасности сетей tcp/ip
- 2. Основы межсетевого обмена в сетях tcp/ip
- 2.1. Структура стека протоколов tcp/ip
- 2.2. Основные протоколы стека tcp/ip
- 2.2.1. Протоколы slip и ppp
- 2.2.2. Протокол arp. Отображение канального уровня на уровень межсетевого обмена
- 2.2.3. Протокол ip
- 2.8. Формат пакета Ipv4
- 2.2.4. IPing - новое поколение протоколов ip
- 2.3. Принципы построения ip-адресов
- 2.4. Подсети
- 2.5. Порты и сокеты
- 2.6. Основные принципы ip-маршрутизации
- 2.7. Настройка операционной системы и сетевые интерфейсы
- 2.8. Настройка сетевых интерфейсов
- 2.8.1. Настройка Ethernet-интерфейса
- 2.8.2. Настройка slip
- 2.8.3. Настройка интерфейса ppp
- 2.9. Маршрутизация, протоколы динамической маршрутизации, средства управления маршрутами
- 2.9.1. Статическая маршрутизация
- 2.9.2. Динамическая маршрутизация
- 2.9.3. Программа routed
- 2.9.4. Программа gated
- 2.10 Анализ и фильтрация tcp/ip пакетов
- 3. Информационные сервисы Internet
- 3.1. Система Доменных Имен
- 3.1.1. Принципы организации dns
- 3.1.3. Регистрация доменных имен
- 3.1.4. Серверы доменных имен и механизм поиска ip-адреса
- 3.1.5. Настройка resolver
- 3.1.6. Программа named
- 3.1.6.1. Файлы настройки named
- 3.1.6.2. Запись "Start Of Authority"
- 3.1.6.3. Запись "Name Server"
- 3.1.6.4. Адресная запись "Address"
- 3.1.6.5. Запись Mail eXchanger
- 3.1.6.6. Запись назначения синонима каноническому имени "Canonical Name"
- 3.1.6.7. Записи типа "Pointer"
- 3.1.6.8. Запись типа hinfo
- 3.1.6.9. Запись определения информационных сервисов "Well Known Services"
- 3.1.6.10. Команды описания зоны
- 3.1.6.11. Файлы описания зоны
- 3.1.7. Примеры настроек программы named и описания зон
- 3.1.7.1. Небольшой поддомен в домене ru
- 3.1.7.2. Описание "прямой" и "обратной" зон для поддомена определенного на двух подсетях
- 3.1.7.3. Делегирование поддомена внутри домена
- 3.1.8. Программа nslookup
- 3.1.9. Dns и безопасность
- 3.2. Электронная почта в Internet
- 3.2.1. Принципы организации
- 3.2.2. Формат почтового сообщения (rfc-822)
- 3.2.3. Формат представления почтовых сообщений mime и его влияние на информационные технологии Internet
- 3.2.3.1. Поле версии mime (mime-Version)
- 3.2.3.2. Поле типа содержания тела почтового сообщения (Content-Type)
- 3.2.3.3. Поле типа кодирования почтового сообщения (Content-Transfer-Encoding)
- 3.2.3.4. Дополнительные необязательные поля
- 3.2.4. Протокол обмена почтой smtp (Simple Mail Transfer Protocol)
- 3.2.5. Интерфейс Eudora
- 3.2.6. Системы почтовой рассылки (программа sendmail)
- 3.2.6.1. Принцип работы программы sendmail
- 3.2.7. Настройка программы sendmail
- 3.2.7.1. Тестирование Sendmail и способы запуска
- 3.3. Эмуляция удаленного терминала. Удаленный доступ к ресурсам сети
- 3.3.1. Протокол Telnet
- 3.3.2. Интерфейс пользователя (telnet) и демон (telnetd)
- 3.3.2.1. Программа-сервер (telnetd)
- 3.3.2.2. Программа-клиент (telnet)
- 3.3.3. Организация модемных пулов, настройка оборудования. Квоты пользователей
- 3.4. Обмен файлами. Служба архивов ftp
- 3.4.1. Типы информационных ресурсов
- 3.4.2. Протокол ftp
- 3.4.3. Сервер протокола - программа ftpd
- 3.5. Администрирование серверов World Wide Web
- 3.5.1. История развития, отцы-основатели, современное состояние
- 3.5.2. Понятие гипертекста
- 3.5.3. Основные компоненты технологии World Wide Web
- 3.5.4. Архитектура построения системы
- 3.5.4.1. Язык гипертекстовой разметки html
- 3.5.4.2. Принципы построения и интерпретации html
- 3.5.5. Протокол обмена гипертекстовой информацией (HyperText Transfer Protocol, http 1.0.)
- 3.5.5.1. Форма запроса клиента
- 3.5.5.2. Методы доступа
- 3.5.5.3. Ответ сервера
- 3.5.5.4. Защита сервера от несанкционированного доступа
- 3.5.6. Universal Resource Identifier - универсальный идентификатор. Спецификация универсального адреса информационного ресурса в сети
- 3.5.6.1. Принципы построения адреса www
- 3.5.6.2. Схемы адресации ресурсов Internet
- 3.5.7. Common Gateway Interface - средство расширения возможностей технологии World Wide Web
- 3.5.7.1. Механизмы обмена данными
- 3.5.7.2. Практика применения скриптов cgi
- 3.5.8. Выбор и установка сервера протокола http и другого программного обеспечения базы данных World Wide Web
- 3.5.8.1. Структура базы данных сервера www
- 3.5.8.2. Редакторы html-документов
- 3.5.8.3. Графические редакторы и их особенности
- 3.5.8.4. Серверы протокола http
- 3.5.8.5. Выбор, установка и настройка сервера
- 3.5.8.6. Обслуживание запросов
- 3.5.9. Организация информационной службы на основе технологии World Wide Web
- 3.5.9.1. Статистика доступа к системе и ее анализ
- 3.6. Информационно-поисковые системы Internet
- 3.6.1. Архитектура современных информационно-поисковых систем World Wide Web
- 3.6.2. Информационные ресурсы и их представление в информационно-поисковой системе
- 3.6.3. Информационно-поисковый язык системы
- 3.6.4. Типы информационно-поисковых языков
- 3.6.5. Традиционные информационно-поисковые языки и их модификации
- 3.6.6. Информационно-поисковые языки Internet
- 3.6.7. Интерфейс системы
- 5. Литература
- Администрирование сети и сервисов internet учебное пособие
- Содержание
- Введение в ip-сети
- Принципы построения составных сетей
- Локализация трафика и изоляция сетей
- Согласование протоколов канального уровня
- Маршрутизация в сетях с произвольной топологией
- Сетевой уровень и модель osi
- Функции сетевого уровня
- Протоколы передачи данных и протоколы обмена маршрутной информацией
- Стек протоколов tcp/ip История и перспективы стека tcp/ip
- Структура стека tcp/ip. Краткая характеристика протоколов
- Адресация в ip-сетях Типы адресов: физический (mac-адрес), сетевой (ip-адрес) и символьный (dns-имя)
- Три основных класса ip-адресов
- Соглашения о специальных адресах: broadcast, multicast, loopback
- Отображение физических адресов на ip-адреса: протоколы arp и rarp
- Отображение символьных адресов на ip-адреса: служба dns
- Автоматизация процесса назначения ip-адресов узлам сети - протокол dhcp
- Протокол межсетевого взаимодействия ip
- Формат пакета ip
- Управление фрагментацией
- Маршрутизация с помощью ip-адресов
- Пример взаимодействия узлов с использованием протокола ip
- Структуризация сетей ip с помощью масок
- Протокол доставки пользовательских дейтаграмм udp
- Зарезервированные и доступные порты udp
- Мультиплексирование и демультиплексирование прикладных протоколов с помощью протокола udp
- Формат сообщений udp
- Протокол надежной доставки сообщений tcp
- Сегменты tcp
- Порты и установление tcp-соединений
- Концепция квитирования
- Реализация скользящего окна в протоколе tcp
- Выбор тайм-аута
- Реакция на перегрузку сети
- Формат сообщений tcp
- Протокол обмена управляющими сообщениями icmp Общая характеристика протокола icmp
- Формат сообщений протокола icmp
- Сообщения о недостижимости узла назначения
- Перенаправление маршрута
- Протоколы обмена маршрутной информацией стека tcp/ip
- Дистанционно-векторный протокол rip
- Комбинирование различных протоколов обмена. Протоколы egp и bgp сети Internet
- Протокол состояния связей ospf
- Развитие стека tcp/ip: протокол iPv.6
- Администрирование информационных систем (tcp/ip)
- Преподаватели
- Аннотация
- Знания и умения, полученные в результате обучения
- Зачет и экзамен
- Требования к начальному уровню знаний
- Программа курса
- Полезные Интернет-ссылки