Главная страница
Навигация по странице:

  • 326 Быстро легко. и Антихакинг

  • 328 Быстро легко. и Антихакинг

  • 330 Быстро легко. Хакинг и Антихакинг выводаLocation: вывода

  • ftp://ftp.cso.uiuc.edu.

  • Server: text/plain вывода П Р И Л О Ж Е Н И Е С HTTP

  • 332 Быстро и легко. Хакинг и

  • Заголовок поля [Значение поля]

  • Allow: GET, HEAD, PUT Content- Encoding

  • Content-Type

  • Запросное HTTP

  • [ Alex WebKnacKer ] Хакинг и антихакинг - защита и нападение. Книги удк 004. 056. 5Alex WebKnacKer


    Скачать 42.38 Mb.
    НазваниеКниги удк 004. 056. 5Alex WebKnacKer
    Анкор[ Alex WebKnacKer ] Хакинг и антихакинг - защита и нападение.pdf
    Дата13.12.2017
    Размер42.38 Mb.
    Формат файлаpdf
    Имя файла[ Alex WebKnacKer ] Хакинг и антихакинг - защита и нападение.pdf
    ТипДокументы
    #11312
    КатегорияИнформатика. Вычислительная техника
    страница15 из 21
    1   ...   11   12   13   14   15   16   17   18   ...   21

    Тогда сервер вызовет шлюз с помощью такой командной строки.
    /text/template/
    Здесь запись
    / означает физический (т.е. по каталогам сервера) путь к программе-сценарию. Как видим, первым аргументом командной строки будет запись /text/template/. Эта запись передается шлюзу, после чего он может предпринять какие-либо действия, в зависимости от самого сценария (скажем,
    использовать какой-либо шаблон документа в указанном записью месте).
    Пусть теперь адрес URL запроса будет следующим.
    Тогда сервер вызовет шлюз с помощью такой командной строки.
    Здесь на месте первого аргумента указан пропуск.
    Перечислим список переменных окружения, устанавливаемых сервером для запускаемых шлюзов CGI, независимо от типа запроса.

    326 Быстро легко.
    и Антихакинг

    - название и версия информационного сервера, который отвечает на запрос и запускает шлюз. Формат переменной таков: имя/версия.
    Например, эта переменная может иметь такое значение:

    - имя Web-сервера, представленное либо в виде DNS-имени,
    либо в виде IP-адреса (это имя должно совпадать с переданным в запросе адресом
    Эта информация может оказаться полезной для генерации в программе шлюза адресов данного сервера. Вот пример значения этой переменной:

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

    - имя и версия информационного протокола, использо- ванного в полученном запросе. Формат переменной таков: протокол/версия.
    Например, эта переменная может иметь такое значение:

    - номер порта, на который был послан запрос, например, 80.

    - метод, который был использован для запроса. Для запро- сов HTTP
    эти методы перечислены в Приложении С.

    - дополнительная информация о пути, которую клиентский браузер поместил в конец адреса запроса сценария. Например, если указанный в запросе адрес имеет вид то требуемый сценарий называется handler.exe, а в переменную будет помещено значение "text/dot". Другими словами, доступ к шлюзу может быть осуществлен по виртуальному пути, за которым следует некоторая дополнительная информация. Эта информация и передается в

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

    Приложение В 327
    виртуальный адрес превращается в физический путь к программе шлюза,
    составленного согласно файловой системе сервера.

    - виртуальный путь к шлюзу, который должен выполняться для данного запроса. Это значение можно для получения в программе шлюза адреса
    (с целью, например, отправки его обратно клиентскому браузеру вместе с ответным документом HTML, после чего браузер может применять этот адрес для повторных вызовов шлюза). Вот пример значения этой переменной:

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

    - имя клиентского компьютера, с которого получен запрос.
    Если сервер не имеет такой информации, он должен установить переменную а это поле оставить пустым.

    - IP-адрес клиентского компьютера, с которого получен данный запрос. Например: 199.23.155.34.

    - если сервер поддерживает идентификацию пользователей и шлюз является защищенным от постороннего доступа, этот специфичный для протокола метод идентификации используется для проверки пользователя.
    Для доступа по протоколу HTTP 1.1 значения этой переменной определены в документе
    Переменная может быть равной или так называемой схеме идентификации HTTP (например, "challenge"), или равна NULL.

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

    - для запросов, которые содержат передаваемую на сервер информацию, типа запросов POST и PUT протокола HTTP, здесь со- держится этой информации, например,

    328 Быстро легко.
    и Антихакинг

    - объем данных, которые передает клиент. Если запрос включает информацию, переданную по методу POST, этой переменной при- сваивается значение, равное числу байтов данных во входном потоке шлюза обработки данных.
    • НТТР_АССЕРТ - список типов содержимого которые может обрабатывать клиентский браузер. Этот список поступает от самого клиентского браузера. Каждый тип содержимого в этом списке должен быть отделен запятой согласно спецификации HTTP. Формат этой переменной таков: тип/подтип, тип/подтип... Вот пример такого списка:

    - имя клиентского браузера, пославшего данный запрос.
    Общий формат переменной таков:
    Вот пример значения этой переменной:
    Вывод
    После обработки полученных данных шлюз выводит результаты в стандартный поток вывода STDOUT, который определяется для каждой запущенной программы одновременно с потоком ввода. Содержимое этого вывода может представлять собой или документ HTML, сгенерированный шлюзом, или директиву серверу, указывающую,
    ему следует получить необходимый документ HTML.
    Как правило, шлюз сам выполняет вывод и пересылку результатов обратно клиенту, не прибегая к услугам сервера. Преимущество этого подхода состоит в том, что шлюз не должен посылать полный заголовок HTTP на каждый запрос.
    Чтобы отличить такие шлюзы от остальных, спецификация CGI требует, чтобы их имена начинались с префикса
    В этом случае на шлюзе лежит ответственность за возвращение клиенту синтаксически правильного ответа.
    Таким образом, вывод результатов шлюзом выполняется двумя способами: вы- вод, контролируемый сервером, и вывод, неконтролируемый сервером.
    сервером
    Для вывода шлюзом CGI результатов обработки данных контролируемым сервером способом, их следует отправить в поток вывода результатов обработки и завершить исполнение программы. Выводимые шлюзом данные должны начинаться с заголовка, содержащего текстовые строки с тем же самым форматом, что и заголовки HTTP, и завершаться строкой, содержащей символ
    CRLF. Любые строки заголовков, не являющиеся директивами серверу, посы- лаются непосредственно клиенту. Спецификация CGI определяет три директивы сервера.
    • Content-type - указывает тип содержимого возвращаемых данных.

    Приложение В 329
    • Location - Эта директива используется в случае, когда необходимо указать серверу, что возвращается не сам документ, а ссылка на него. Если аргу- ментом директивы является адрес URL, то сервер передаст клиенту указание на перенаправление запроса. Если аргумент представляет собой виртуальный путь, сервер вернет клиенту заданный этим путем документ, как если бы клиент запрашивал его непосредственно.
    Status - Эта директива используется для указания серверу HTTP строки состояния, которую он должен переслать клиенту. Формат строки таков:
    ххххх, где
    - это код состояния, состоящий из трех цифр, а ххххх - текстовая строка с пояснением кода состояния, например, такая: Forbidden
    (Запрещено).
    Приведем примеры использования этих директив. Предположим, что имеется некоторая программа-сценарий, преобразующая текстовые данные в документ
    HTML. Когда сценарий заканчивает свою работу, он должен произвести следую- щий вывод в стандартный выходной поток.
    вывода text/html вывода
    Далее приведена простейшая программа на языке С, которая в ответ на запрос формы, приведенной в разделе «Передача данных шлюзам» выше, отображает на экране клиентского браузера поздравление пользователю.
    int argc, char
    {
    printf (
    )
    с Вашим printf
    ;
    }
    Эта программа не делает никакой обработки — она просто передает в выходной поток строки с тегами HTML, используя библиотечную функцию printf ()
    языка С. Сервер обрабатывает выходной поток и формирует корректное ответ- ное сообщение HTTP, передаваемое клиентскому браузеру.
    Теперь рассмотрим шлюз, который в определенных случаях должен отсылать клиентскому браузеру документ anydoc.txt, хранимый в каталоге данного сервера. При этом он действует так, как если бы этот документ был непосредственно запрошен клиентским браузером с помощью ссылки на адрес
    В этом случае, вывод шлюза будет таков.

    330 Быстро легко. Хакинг и Антихакинг
    вывода
    Location:
    вывода
    Наконец, предположим, что шлюз возвращает ссылки на сервер FTP, например,
    с таким адресом: ftp://ftp.cso.uiuc.edu. Вывод шлюза будет таков.
    вывода конец вывода
    Программы, реализующие эти возможности, достаточно прозрачны - они просто помещают в поток вывода соответствующие директивы, если обработка входных данных покажет, что в этом имеется необходимость.
    не
    Допустим теперь, что у нас имеется шлюз, который общается с клиентом непо- средственным образом. Как уже отмечалось, его имя должно начинаться с пре- фикса и он должен возвращать клиентскому браузеру корректный заго- ловок HTTP. В этом случае, если сервер при запуске программы шлюза устано- вил для переменной окружения значение его вывод должен удовлетворять протоколу HTTP
    вывода
    Server:
    text/plain
    вывода

    П Р И Л О Ж Е Н И Е С
    HTTP
    Все информационные ресурсы Интернета организованы в виде гипертекстовой информационной системы, более известной как сеть Web, хранящей документы
    HTML, связанные между собой гиперссылками. Для взаимодействия клиентских компьютеров с серверами Web используется протокол HTTP (Hypertext Transfer
    Protocol - Протокол передачи гипертекстовых файлов). Протокол HTTP
    обеспечивает загрузку на клиентский компьютер документа по указанному адресу и переходы на другие документы по гиперссылкам. В настоящее время применяется версия HTTP
    этого протокола (определенная стандартом RFC 2616,
    который можно найти в Интернете по адресу
    и
    подготавливается новая версия HTTP 1.2. Обсудим основные принципы сетевого взаимодействия, определяемые протоколом HTTP
    cmpykmypa
    HTTP
    Взаимодействие клиентского компьютера с сервером Web протекает следующим образом. Пользователь указывает браузеру адрес нужного ему документа Web,
    браузер посылает серверу запрос, на который он через какое-то время получает ответ и отображает его пользователю. Протокол HTTP определяет структуру данных, передаваемых серверу (запрос) и получаемых с сервера (ответ, или ответное сообщение). Эти сообщения представляют собой последовательности байтов двоичного кода, называемых потоками, путешествующими от сервера к клиенту и обратно. И запрос, и ответ имеют одинаковую структуру, или формат этих потоков информации. Формат запроса (ответа) определяется стандартом
    RFC 822. Сообщения HTTP 1.1 состоят из начальной строки, совокупности полей заголовков, разделенных символами возврата каретки (CR) и перевода строки (LF) - и необязательного тела сообщения.
    Начальная
    CRLF
    [Тело
    Начальные строки в запросных и ответных сообщениях различаются между собой.
    запросных сообщениях начальная строка включает в себя метод обработки ресурса, запрашиваемого по указанному далее в строке адресу ресурса, а также номер версии протокола HTTP. В ответных сообщениях начальная строка играет роль строки состояния, содержащей трехзначный числовой код, фиксирующий итог выполнения запроса. Каждая цифра этого кода означает определенное состояние процесса выполнения запроса; например,
    значение строки состояния 200 означает успешное выполнение запроса, 402 - указывает на необходимость оплаты за загрузку ресурса, и т.д.

    332 Быстро и легко. Хакинг и
    Тело сообщения содержит те сведения, которые, собственно, и передаются в сообщении (например, документ HTML).
    Заголовки сообщений являются полями данных, также называемых полями заголовков. Они состоят из имени поля (состоящего из набора букв, причем регистр букв не учитывается) и необязательного значения поля, разделенных символом двоеточия (:).
    Заголовок
    поля
    [Значение поля]
    Назначение полей заголовков в запросных и ответных сообщениях различно, но все они подразделяются на общие заголовки, заголовки ответов, заголовки запросов и информационные заголовки.
    • Общие заголовки содержат информацию, одинаково применимую как в запросах, так и ответах, например, дату запроса или параметры соединения.
    • Заголовки запросов передают серверу дополнительную информацию о клиенте, например, его идентификационные данные, требуемые для доступа к запрашиваемому ресурсу.
    • Заголовки ответов, наоборот, передают клиенту информацию о сервере,
    например, информацию о программе (включая ее название и краткое описание), используемой для обработки запроса.
    • Информационные заголовки включают сведения о самой информации, пере- даваемой в запросе или ответе.
    Заголовки первых трех типов рассмотрены в разделе «Запросное сообщение
    HTTP», где будет обсуждаться работа с формами, а сейчас обратим внимание на информационные заголовки, которые непосредственным образом определяют характер содержимого документа HTML, т.е. содержат метаданные о документе.
    Вот список этих заголовков (табл.
    HTTP 1.1
    Имя
    Назначение
    Содержит перечень методов, допустимых в запросах данного ресурса, например: Allow: GET, HEAD, PUT
    Content-
    Encoding
    Указывает способ кодирования тела запроса и используется для указания метода сжатия, примененного к телу сообще- ния. Дополняет указание типа содержимого в теле сообще- ния, содержащееся в заголовке Content-Type, например:
    Content-Encoding: gzip
    (указывает на сжатие gzip)

    Приложение С
    Имя
    Content-
    Language
    Content-
    Length
    Content-
    Location
    Content-
    Range
    Content-Type
    Expires
    Last-Modified
    Назначение
    Указывает на исходный язык документа, например:
    Content-Language: da
    (здесь определен датский язык)
    Указывает размер документа в байтах, например:
    Content-Length: 35645
    Содержит перечень относительных и/или абсолютных адре- сов URL других ресурсов, требуемых телу сообщения, и хра- нящихся в других местах Web. При разрешении указанных здесь относительных адресов URL базовым адресом считает- ся адрес запроса.
    Содержит дайджест (т.е. краткий цифровой код документа,
    используемый для его цифровой подписи) тела сообщения,
    определенный стандартом RFC
    Если тело сообщения передается частями, этот заголовок ука- зывает позицию фрагмента сообщения во всем сообщении.
    Перечисляет все типы содержимого для данных, хранимых в теле сообщения. Значения этого заголовка имеют такой формат:
    Здесь Туре - это тип, a Subtype - подтип содержимого; после этой пары могут быть перечислены соответствующие ей па- раметры и их значения, разделенные точкой с запятой. На- пример, заголовок:
    Content-Type:
    charset=ISO-8859-4
    указывает, что тело сообщения является текстовым докумен- том HTML, подготовленным в кодировке ISO-8859-4. Исполь- зуемые типы содержимого должны регистрироваться в спе- циальной организации
    (Internet Assigned Numbers
    Authority - Агентство по выделению имен и уникальных пара- метров протоколов Интернет).
    Указывает дату и время, по истечении которого информация в теле сообщения считается устаревшей, например:
    Expires: Sat, 04 Dec
    GMT
    Указывает дату и время последнего обновления ресурса, на- пример: Last-Modified: Tue, 17 Dec 2001 11:40:26 GMT

    334
    Быстро и легко. Хакинг и Антихакинг
    В дополнение к заголовкам в табл.
    информационные заголовки могут быть пополнены другими заголовками, что не требует внесения изменений в протокол
    (хотя дополнительные заголовки не обязаны распознаваться всеми программами обработки документов HTML). Чтобы включить в ответное сообщение, посы- лаемое на запрос документа HTML, информационный заголовок HTTP, авторы могут воспользоваться элементом МЕТА языка HTML.
    Запросное
    HTTP
    Запросное сообщение HTTP имеет ту же самую структуру, что и ответное
    (см. выше), за исключением начальной строки. Эта строка в случае запросных сообщений называется строкой запроса, и она имеет такой вид.
    Строка
    SP
    SP
    Здесь SP - это символ пробела ASCII (код 32), Метод - это название метода
    HTTP, который должен быть применен к ресурсу, указанному запрашиваемым адресом URL, a
    - это код возврата каретки (CR) и перевода строки
    Набор методов запроса HTTP указан в табл.
    Таблица
    2. Методы запроса HTTP
    Метод
    Назначение
    Этот метод представляет собой запрос информации о сред- ствах, обеспечиваемых подключением к запрашиваемому ресурсу.
    OPTIONS
    GET
    Этот метод предназначен для запроса информации, пре- доставляемой ресурсом, указанным адресом URL запроса.
    Эта информация должна предоставляться в теле ответного сообщения.
    HEAD
    Этот метод подобен методу GET за исключением того, что теперь сервер не должен предоставлять информацию в те- ле ответного сообщения; от него требуется только с помо- щью заголовков HTTP переслать метаинформацию о ре- сурсе.
    POST
    Этот метод применяется для запроса, который указывает серверу, что пересылаемое в запросе тело сообщения должно быть передано ресурсу, указанному адресом в
    строке запроса.
    PUT
    Этот метод указывает, что содержащаяся в теле запроса информация должна быть помещена на сервер по указан- ному адресу

    1   ...   11   12   13   14   15   16   17   18   ...   21


    написать администратору сайта