«Техника сетевых атак»
Вид материала | Краткое содержание |
СодержаниеДополнение. Протокол CGI Врезка «замечание» Врезка «замечание» Впрочем, правила CGI не столь строги и достаточно прозрачны, поэтому временами можно забывать какой посредник обеспечивает обмен |
- Комплексный подход к обнаружению сетевых атак, 70.8kb.
- Предотвращение атак: революция или эволюция?, 98.18kb.
- Темы курсовых работ по дисциплине «Безопасность и управление доступом в ис» Модель, 15.44kb.
- Технические особенности сетевых сообществ и их педагогические следствия, 124.33kb.
- А. А. Грабко научный руководитель В. С. Горбатов, к т. н., доцент Московский инженерно-физический, 29.26kb.
- Это комплекс взаимосвязанных и согласованно функционирующих программных и аппаратных, 277.11kb.
- Лекция: Определение локальных сетей и их топология Вэтой лекции говорится о базовой, 250.42kb.
- Лекция: Определение локальных сетей и их топология Вэтой лекции говорится о базовой, 318.77kb.
- Тутер Нина Валерьевна Клинико-психофизиологический анализ панических атак при различных, 560.1kb.
- Использование современных компьютерно-сетевых технологий в информационном обеспечении, 158.29kb.
Дополнение. Протокол CGI
- В этой главе:
- Краткая история создания и развития протокола CGI
- Устройство и назначение протокола CGI
- Перечень популярных CGI-переменных
Вопреки распространенному заблуждению неразрывности HTTP и CGI, последний представляет собой самостоятельный протокол, возникший еще в те незапамятные времена, когда web серверов и в помине не существовало.
Первые, робкие попытки использования CGI протокола HTTP-серверами относятся к 1993 году, когда возникла необходимость обрабатывать формы, заполняемые пользователем и генерировать динамические страницы, выводящие, например, результаты некоторого поиска.
Традиционный 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&pass=salt%20mine
- REMOTE_HOST = ppp-05.krintel.ru
- REMOTE_ADDR = 195.161.41.229
- REMOTE_USER =
- CONTENT_TYPE =
- CONTENT_LENGTH =
Врезка «замечание»
После сказанного становиться понятно, что термин «CGI-приложения» технически неграмотен. На самом деле следовало бы говорить «приложения, выполняющиеся на удаленной машине и взаимодействующие с клиентом через CGI-интерфейс».
Впрочем, правила CGI не столь строги и достаточно прозрачны, поэтому временами можно забывать какой посредник обеспечивает обмен данными.