Чтение онлайн

на главную

Жанры

Техника сетевых атак
Шрифт:

Традиционный HTML этого делать не умел, о Java еще никто не слышал, поэтому единственным выходом представлялось использование для этой цели внешних программ, написанных, например, на Си и исполняющихся на сервере.

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

Техническая реализация этого процесса выглядит следующим образом - каждый раз при запросе на запуск скрипта (смотри методы GET и POST), HTTP-сервер создает виртуальную среду, в которой выполняется требуемый файл. Обмен данными осуществляется через стандартный ввод-вывод (тело сообщения) и переменные окружения (HTTP-заголовок).

Таким образом, стало возможным разрабатывать программы с использованием стандартных библиотек. Все заботы согласования с протоколом взял на себя интерфейс CGI.

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

– Переменная Поле HHTP Значение

– AUTH_TYPE Authorization Механизм аутентификации

– CONTENT_LENGTH Content-Length Длина тела сообщения

– CONTENT_TYPE Content-Type Тип данных тела сообщения

– QUERY_STRING Строка параметров ресурса

– REMOTE_ADDR IP адрес клиента [276]

– REQUEST_METHOD Используемый метод (GET, POST…)

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

Именно для этого в каждый Perl-скрипт должна быть включена строка ‘print “Content-type: text/html\n\n”;’, иначе возникнет ошибочная ситуация.

Врезка «замечание»

В некоторых ситуациях, динамическая страница не генерируется, а всего лишь перенаправляется запрос на другой сервер или ресурс, изменением поля “Location:” в HTTP-заголовке.

Если результатом работы скрипта является двоичный файл солидных размеров, настоятельно рекомендуется включить в заголовок поле “Content-Length”, чтобы клиентское программное обеспечение могло корректно отображать бегунок прогресса. Сказанное выше справедливо и для обработки пользовательских запросов. Чтобы узнать длину переданных данных, скрипт должен считать переменную CONTENT_LENGTH.

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

· fgets(*buffer,getevn(“CONTENT_LENGTH”),stdin);

Широко известный скрипт «test-cgi» [277], является не более чем тривиальным командным файлом для оболочки "sh” (UNIX), который выводит переменные окружения посредством команды «echo».

· #!/usr/bin/sh

· echo Content-type: text/plain

· echo

· echo SERVER_SOFTWARE = $SERVER_SOFTWARE

· echo SERVER_NAME = $SERVER_NAME

· echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE

· echo SERVER_PROTOCOL = $SERVER_PROTOCOL

· echo SERVER_PORT = $SERVER_PORT

· echo REQUEST_METHOD = $REQUEST_METHOD

· echo HTTP_ACCEPT = "$HTTP_ACCEPT"

· echo PATH_INFO = $PATH_INFO

· echo PATH_TRANSLATED = $PATH_TRANSLATED

· echo SCRIPT_NAME = $SCRIPT_NAME

· echo QUERY_STRING = $QUERY_STRING

· echo REMOTE_HOST = $REMOTE_HOST

· echo REMOTE_ADDR = $REMOTE_ADDR

· echo REMOTE_USER = $REMOTE_USER

· echo CONTENT_TYPE = $CONTENT_TYPE

· echo CONTENT_LENGTH = $CONTENT_LENGTH

· SERVER_SOFTWARE = Apache/1.3.12 (Unix) mod_perl/1.22 AuthMySQL Plus/2.20.2 PHP/3.0.14 rus/PL29.4

· SERVER_NAME = kpnc.softclub.net

· GATEWAY_INTERFACE = CGI/1.1

· SERVER_PROTOCOL = HTTP/1.1

· SERVER_PORT = 80

· REQUEST_METHOD = GET

· HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*

· PATH_INFO =

· PATH_TRANSLATED =

· SCRIPT_NAME = /cgi-bin/test-cgi

· QUERY_STRING = user=kpnc amp;pass=salt%20mine

· REMOTE_HOST = ppp-05.krintel.ru

· REMOTE_ADDR = 195.161.41.229

· REMOTE_USER =

· CONTENT_TYPE =

· CONTENT_LENGTH =

Врезка «замечание»

После сказанного становиться понятно, что термин «CGI-приложения» технически неграмотен. На самом деле следовало бы говорить «приложения, выполняющиеся на удаленной машине и взаимодействующие с клиентом через CGI-интерфейс».

Впрочем, правила CGI не столь строги и достаточно прозрачны, поэтому временами можно забывать какой посредник обеспечивает обмен данными.

Дополнение. Язык HTML

Протокол HTTP был разработан как одна из возможных (и, как оказалось впоследствии не самых лучших) реализацией языка гипертекста HTML (Hyper text Markup Language).

В середине восьмидесятых годов наиболее популярным способом распространения информации в Internet был… терминал telnet. Недостатком такого подхода была необходимость работы в реальном времени и изучения команд интерфейса удаленной программы (каждый раз разных).

Популярные книги

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Кровь на клинке

Трофимов Ерофей
3. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Кровь на клинке

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Везунчик. Дилогия

Бубела Олег Николаевич
Везунчик
Фантастика:
фэнтези
попаданцы
8.63
рейтинг книги
Везунчик. Дилогия

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Баоларг

Кораблев Родион
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Баоларг

Пенсия для морского дьявола - 3. Подводный охотник

Чиркунов Игорь
3. Первый в касте бездны
Фантастика:
попаданцы
5.00
рейтинг книги
Пенсия для морского дьявола - 3. Подводный охотник

Луч света в темном царстве

Вяч Павел
2. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
6.00
рейтинг книги
Луч света в темном царстве

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Наследник в Зеркальной Маске

Тарс Элиан
8. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник в Зеркальной Маске

Идеальный мир для Лекаря 11

Сапфир Олег
11. Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 11