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

  • Приложение В 317 Успешные


  • 318 _ Быстро легко. Хакинг и Антихакинг Кодирование набора данных формы

  • Подписаться на прием

  • Укажите свое Укажите отправляемые

  • 320 Быстро легко. Хакинг и multipart/form-data; Content-Disposition: form-data; Ivanov Content-Disposition: text/plain файла

  • Content-Type: multipart/form-data; Content-Disposition: form-data; Ivanov Content-Disposition: form-data; multipart/mixed;

  • 322 Быстро легко. Хакинг и Антихакинг набора данных формы

  • [ 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
    КатегорияИнформатика. Вычислительная техника
    страница14 из 21
    1   ...   10   11   12   13   14   15   16   17   ...   21
    316 Быстро легко. Хакинг и Антихакинг
    9. По завершении обработки данных шлюз передает результаты обработки серверу Web и завершает работу (или же шлюз может сам передать результаты клиентскому браузеру и завершить работу).
    10. Сервер обнаруживает, что сценарий завершил работу, после чего отсылает
    (если необходимо) результаты работы сценария обратно клиентскому браузеру.
    Клиентский браузер отображает полученные результаты в своем окне.
    Итак, процесс взаимодействия сценария с формой регламентируется тремя следующими стандартами, каждый из которых отвечает за определенный этап клиент-серверного взаимодействия в сети Web.
    • Спецификацией HTML 4, определяющей содержимое набора данных формы,
    отправляемого на сервер.
    • Протоколом HTTP, отвечающим за передачу запроса от клиентского браузера на информационный сервер Web.
    • Протоколом CGI, определяющим взаимодействие шлюза на Web-сервере с клиентским браузером.
    Обсудим эти три аспекта сетевого взаимодействия более подробно.
    набора данных формы
    Когда пользователь отправляет данные формы на сервер (например, щелкнув на кнопке подтверждения формы) для последующей обработки, клиентский браузер выполняет следующие действия.
    1. Определяет успешные элементы управления, т.е. элементы управления,
    «пригодные» для отправки их значений на сервер. Правила, по которым браузер выявляет успешные элементы управления, описаны в разделе
    «Успешные элементы управления» чуть ниже.
    2. Подготавливает набор данных формы, представляющий собой последовате- льность пар имя элемента управления/значение. Набор данных формы составляется из успешных управляющих элементов.
    3. Кодирует набор данных формы в соответствии с типом их содержимого,
    определенного атрибутом ENCTYPE элемента
    Далее закодированный набор данных формы передается по протоколу HTTP на сервер, содержащий программу-сценарий обработки этих данных. Мы обсудим последнее действие чуть позже, а пока объясним правила, по которым клиентский браузер выявляет успешные элементы управления и составляет из них набор данных формы.

    Приложение В 317
    Успешные
    Успешный элемент управления - это тот, который удовлетворяет некоторым условиям, делающим возможным отправку его значения на сервер. Каждый успешный элемент управления должен иметь имя и текущее значение; эта пара включается в состав передаваемого набора данных формы. Также успешный элемент управления должен находиться в контейнере элемента FORM и удовлетворять следующим ограничениям.
    • Успешным является любой установленный флажок.
    • Если в форме содержится несколько кнопок подтверждения формы,
    успешной является только активированная пользователем кнопка.
    • Для меню имя элемента управления задается элементом SELECT, а значения - выбранными элементами OPTION. Успешными могут быть только элементы управления SELECT с выбранными пунктами.
    • Текущим значением элемента управления для выбора файлов является список из одного или нескольких имен файлов. После подтверждения формы содержимое каждого файла пересылается вместе с остальными данными формы. Содержимое передаваемого файла упаковывается в соответствии с типом содержимого формы.
    • Для переключателя, кнопки которого имеют одинаковое значение атрибута
    NAME, успешной может быть только «включенная» кнопка.
    • Текущее значение элемента управления, реализованного элементом OBJECT
    определяется конкретной реализацией объекта.
    • Если элемент управления при подтверждении формы не имеет текущего значения, клиентские браузеры не должны считать его успешным. Более того,
    клиентские браузеры не должны считать успешными кнопку сброса и элементы у которых установлен атрибут DECLARE.
    Скрытые управляющие элементы и управляющие элементы, не воспроизво- димые браузером согласно правилу таблицы стилей, также могут быть успешными. Например, пусть у нас имеется такая форма.



    В данном случае текущее значение "myname" элемента управления будет сопоставлено с его именем "hide-text" и соответствующая пара имя/значение будет включена в набор данных формы.

    318 _ Быстро легко. Хакинг и Антихакинг
    Кодирование набора данных формы
    Перед передачей на сервер набор данных формы кодируется в соответствии со значением атрибута элемента FORM, который определяет тип содержимого, соответствующий пересылаемым данным. Клиентские браузеры должны поддерживать перечисленные в следующем разделе типы содержимого,
    в противном случае их поведение в процессе обработки формы будет непред- сказуемо.
    Tun
    Этот тип содержимого используется по умолчанию. Набор данных формы,
    кодируемый согласно данному типу составляется следующим образом.
    • Из формы извлекаются имена и значения элементов управления, после чего символы пробелов заменяются символами +. Символы, не являющиеся буквами или цифрами, заменяются кодом где за знаком процента следуют цифры, представляющие код ASCII этого символа.
    Разрывы строк представляются парами CRLF (т.е. значением
    • Пары элементов управления перечисляются согласно их позиции в тексте документа. Имя отделяется от значения с помощью символа =, а пары имя/значение отделяются друг от друга символом &.
    Рассмотрим, например, следующую форму.


    Подписаться на прием
    Подтверждение этой формы с введенным именем подписчика Ivan Petrov и адресом электронной почты petrov@email.com приведет к отправке такого набора данных формы:
    firstname=lvan&lastname=Petrov&postal-
    address=petrov @

    Приложение В 319
    Tun содержимого
    Тип содержимого неэффективен для отправки большого количества двоичных данных или текста, содержащего не входящие в набор ASCII. Для отправки набора данных формы,
    содержащего файлы или данные с символами, не входящими в набор ASCII, или двоичные данные, больше подходит тип содержимого "multipart/form-data".
    Сообщение с типом содержимого "multipart/form-data" состоит из нескольких частей, каждая их которых представляет успешный элемент управления. Эти части пересылаются в программу обработки формы в том порядке, в котором соответствующие им элементы управления представлены в документе HTML. Каждая часть может содержать необязательный заголовок значение которого по умолчанию равно
    Кроме этого, каждая часть должна содержать следующие компоненты.
    • Заголовок имеющий значение
    • Атрибут имени соответствующего элемента управления.
    Например, для элемента управления с именем "control-name" соответст- вующая часть набора данных формы может выглядеть так:
    Content-Disposition:
    Если в наборе данных формы передаются данные, хранимые в файле, для этих данных должен быть определен тип содержимого (например,
    "application/octet-stream"). Если с помощью одного элемента формы было выбрано несколько файлов, они должны пересылаться с указанием типа содержимого "multipart/mixed".
    В следующем примере показан результат кодирования согласно типу содер- жимого
    Предположим, у нас имеется следующая форма.
    Укажите свое

    Укажите отправляемые

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

    320 Быстро легко. Хакинг и
    multipart/form-data;
    Content-Disposition: form-data;
    Ivanov
    Content-Disposition:
    text/plain
    файла
    Здесь использован обязательный параметр boundary, задающий строку,
    разделяющую части передаваемых данных. Если пользователь выбрал второй файл с изображением то клиентский браузер отправляет следующие части набора данных формы.
    Content-Type: multipart/form-data;
    Content-Disposition: form-data;
    Ivanov
    Content-Disposition: form-data;
    multipart/mixed;
    Content-Disposition: attachment;
    Content-Type: text/plain
    файла
    Content-Disposition: attachment;
    binary
    файла
    Итак, мы уже знаем, как следует подготавливать набор данных формы,
    предназначенный для передачи программе-сценарию для их обработки.
    Рассмотрим, как это происходит.
    набора данных формы
    Согласно спецификации языка HTML 4 при отправке набора данных формы для их обработки клиентский браузер устанавливает связь с сервером HTTP и посылает ему запросное сообщение (выполняет транзакцию HTTP). Структура запросных и ответных сообщений HTTP описана в Приложении С, однако напомним, что каждое сообщение HTTP состоит из начальной строки,
    заголовков сообщения и тела сообщения, и запросное сообщение HTTP имеет ту

    Приложение 321
    же самую структуру, что и ответное, за исключением начальной строки. Эта строка в случае запросных сообщений называется строкой запроса, и она имеет такой вид.
    Строка запроса=Метод SP
    SP
    Здесь SP - это символ пробела ASCII
    32), Метод - это название метода
    HTTP, который должен быть применен к ресурсу, указанному запрашиваемым адресом URL, a
    - это код возврата каретки (CR) и перевода строки
    Набор методов запроса HTTP перечислен в Приложении С, для нас же важны два следующих метода, поддерживаемые в язык HTML 4.
    • GET - Этот метод предназначен для запроса информации, предоставляемой ресурсом, указанным адресом URL запроса. Эта информация должна предоставляться в теле ответного сообщения.
    • POST — Этот метод применяется для запроса, который указывает серверу, что пересылаемое в запросе тело сообщения должно быть передано ресурсу,
    указанному адресом URL в строке запроса.
    В языке HTML 4 метод HTTP, используемый для отправки формы в программу обработки, определяется атрибутом METHOD элемента FORM. Передача данных при этом происходит следующим образом.
    • Если для атрибута METHOD установлено значение а для атрибута
    ACTION указан адрес HTTP, то клиентский браузер берет значение атрибута
    ACTION, добавляет к нему символ затем добавляет набор данных формы, закодированный с использованием типа содержимого
    Затем браузер выполняет транзакцию
    GET протокола HTTP, отправляя этот адрес URL на сервер для обработки.
    При использовании метода GET набор данных формы ограничивается кодами ASCII.
    • Если для атрибута METOD установлено значение "post", а атрибут ACTION
    определен как адрес HTTP, то клиентский браузер выполняет транзакцию
    POST протокола HTTP с использованием значения атрибута ACTION и сообщения, созданного в соответствии с типом содержимого, определенным атрибутом ENCTYPE (см. раздел «Кодирование набора данных формы» чуть выше).
    Для других значений атрибута ACTION или METHOD способ обработки набора данных формы спецификацией HTML 4 не определен. После выполнения транзакций GET и POST протокола HTTP клиентские браузеры должны предс- тавлять пользователю полученные отклики на соответствующие транзакции.
    Теперь посмотрим, что происходит с переданными данными на самом сервере.
    11

    322 Быстро легко. Хакинг и Антихакинг
    набора данных формы
    Как мы уже говорили, переданный на сервер HTTP набор данных формы далее обрабатывается согласно протоколу CGI. Этот протокол является стандартом,
    определяющим интерфейс между серверным приложением и информационным сервером например, сервером HTTP. Протокол CGI определяет порядок передачи данных, полученных сервером Web от клиента, программе- сценарию их обработки, и наоборот, передачу результатов работы программ- сценариев соответствующим клиентам. Для обеспечения такого взаимодейст- вия функционирует подобно серверу-посреднику между клиентом и сервером Web с запрашиваемыми ресурсами. Примерами таких GGI- программ являются приложения баз данных, электронные таблицы, деловые приложения др., которые по поступающим запросам выдают на экран клиентского браузера динамическую информацию.
    CGI-программа шлюза запускается сервером Web в ответ на запрос клиента в реальном масштабе времени. Сервер, действуя по протоколу CGI, обеспечивает передачу запроса пользователя шлюзу. Шлюз, в свою очередь, используя средства прикладной системы, возвращает клиенту результат обработки запроса.
    Программа, реализующая шлюз, может быть закодирована на языках C/C++,
    PHP, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script и др. Исполняемый модуль программы должен храниться в специальном каталоге Web-сервера,
    который определяется используемой платформой (серверной операционной системой). Однако способ передачи данных в программу и результатов их обработки из программы не зависит от платформы и языка кодирования,
    поскольку протокол CGI имеет общий характер. Опишем сначала процесс передачи набора данных формы в программу-сценарий.
    Передача данных шлюзам
    Итак, получив запрос на обработку данных сценарием, сервер запускает и передает ей данные. Для передачи данных полученного запроса HTTP от сервера к шлюзу сервер использует командную строку,
    переменные окружения и стандартный входной поток программы, автома- тически открываемый операционной системой (Windows, UNIX и др.) при запуске любой программы на компьютере.
    Командная строка - это строка, вводимая на приглашение операционной системы для запуска какой либо программы. Каждый, кто работал в среде MS DOS
    или использовал командную строку Windows, уже знаком с этим понятием.
    Командная строка состоит из имени исполняемого модуля, сопровождаемого набором входных параметров, задающих режим работы программы и ее входные данные. Например, ввод командной строки
    arj a archiv file.txt

    Приложение В 323
    означает запуск программы архиватора arj.exe в режиме пополнения (входной параметр а) архива с именем archiv файлом с именем file.txt.
    Переменные окружения - это набор системных переменных, доступных прог- рамме, который содержит набор параметров вычислительного окружения прог- раммы. Эти переменные окружения устанавливаются в тот момент, когда сервер запускает программу шлюза, и существуют до момента завершения программы.
    Хотя в сети Web используется множество серверов с различными вычислитель- ными платформами и операционными системами, все они предоставляют стан- дартный набор переменных окружения. Для получения переменных окружения в программе С следует использовать библиотечную функцию
    Входной поток - это последовательность байтов данных, хранимых в памяти компьютера и доступных программе. Для доступа к этим данным в программах используются специальные библиотечные функции, входящие в набор всех рас- пространенных средств разработки программного обеспечения. В случае ис- пользования языка С этот поток называется STDIN; для считывания данных из потока STDIN используется функция fgetc
    Информация шлюзам передается в следующей форме.
    Здесь Имя - это имя передаваемого программе параметра данных (в нашем случае это имя элемента управления формы), а Значение - это фактическое значение параметра (т.е. значение элемента управления). Способ, по которому эта информация передается шлюзу, зависит от метода запроса, указанного атрибутом METHOD формы. Для определения метода запроса шлюз должен использовать переменную окружения
    (см. ниже).
    В случае метода GET эта строка передается как часть адреса запроса, и бу- дет передана шлюзу в переменной окружения
    В случае метода POST эта информация будет послана в стандартный поток ввода шлюза. В последнем случае объем информации, содержащийся в стандартном потоке ввода, определяется переменной окружения задающей число байтов в потоке. Тип передаваемых шлюзу данных определяется перемен- ной окружения
    Сервер не обязан посылать символ конца потока после успешной пересылки шлюзу значения переменной
    Приведем пример обработки формы с помощью описанной выше процедуры.
    Возьмем в качестве примера следующую форму запроса.


    324 _ Быстро легко. Хакинг и
    на группу
    Подписаться на прием

    После подтверждения формы и отправки ее данных на сервер для обработки методом POST (поскольку в элементе FORM атрибут METHOD равен "post") в программу-сценарий во входном потоке поступит 42 байта, закодированных таким образом:
    В этом случае сервер установит значение переменной равным 42, а значение переменной CONTENT_TYPE установит равным
    Первым символом в стандартном потоке ввода для шлюза будет символ за которым будет следовать остаток закодированной строки.
    В командной строке и переменных окружения шлюзу передается множество другой информации. В следующих разделах содержится ее обсуждение
    (заметьте, что эта информация применима не только для обработки данных формы).
    Аргументы
    В командной строке шлюз получает от сервера следующие данные.
    • Часть адреса помещенную клиентским браузером сразу после имени шлюза. Эта часть передается шлюзу в качестве первого параметра (если в адресе URL указано только имя шлюза, первый параметр будет пуст).
    Остальная часть данных будет содержать следующие сведения.
    • Если сценарий реализует машину поиска, в оставшуюся часть командной строки включается список ключевых слов, используемых для поиска.

    Приложение В 325
    • В противном случае в оставшуюся часть командной строки включаются пары имя/значение элементов управления формы с добавленными знаками равенства между ними.
    Ключевые слова, имена полей формы, и значения передаются шлюзу в декодированном виде, так что нет необходимости в их дополнительном преобразовании.
    Таким образом, в дополнение к описанным в предыдущем разделе способам,
    набор данных формы, переданный на сервер, попадает в командную строку вызова шлюза. Каждый аргумент командной строки, соответствующий паре имя/значение элемента управления дополняется знаком равенства между именем элемента и значением. Если после имени программы-сценария в пере- даваемом адресе URL клиентский браузер поместит какую-либо запись, эта часть адреса URL передается сценарию в виде первого параметра командной строки. В противном случае позиция первого параметра командной строке будет пустой.
    Например, пусть на сервер поступает запрос сценария с представленным ниже адресом
    (играющим роль «виртуального» путевого имени к шлюзу,
    поскольку этот путь не имеет отношения к реальному пути к ресурсу по ката- логам сервера).
    1   ...   10   11   12   13   14   15   16   17   ...   21


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