Сравнительная характеристика XML и HTML

Структура приложений в сети Интернет. Привести схему и пояснить назначение ее основных составных частей

2. Дать характеристику протоколу HTTP. Его соотношение с другими протоколами (Ethernet, TCP/IP, FTP, Telnet и др)

HTTP (HyperText Transfer Protocol - RFC 1945, RFC 2616) - протокол прикладного уровня для передачи гипертекста.

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

Все программное обеспечение для работы с протоколом HTTP разделяется на три основные категории:

· Серверы - поставщики услуг хранения и обработки информации (обработка запросов).

· Клиенты - конечные потребители услуг сервера (отправка запросов).

· Прокси-серверы для поддержки работы транспортных служб.

"Классическая" схема HTTP-сеанса выглядит так.

1. Установление TCP-соединения.

2. Запрос клиента.

3. Ответ сервера.

4. Разрыв TCP-соединения.

Таким образом, клиент посылает серверу запрос, получает от него ответ, после чего взаимодействие прекращается. Обычно запрос клиента представляет собой требование передать HTML-документ или какой-нибудь другой ресурс, а ответ сервера содержит код этого ресурса.

Формат данных в протоколе HTTP

Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату, кодировке, языку и т. д. Именно благодаря возможности указания способа кодирования сообщения клиент и сервер могут обмениваться двоичными данными, хотя изначально данный протокол предназначен для передачи символьной информации. На первый взгляд это может показаться излишней тратой ресурсов. Действительно, данные в символьном виде занимают больше памяти, сообщения создают дополнительную нагрузку на каналы связи, однако подобный формат имеет много преимуществ. Сообщения, передаваемые по сети, удобочитаемы, и, проанализировав полученные данные, системный администратор может легко найти ошибку и устранить ее. При необходимости роль одного из взаимодействующих приложений может выполнять человек, вручную вводя сообщения в требуемом формате.

  1. HTTP запрос. Виды запросов. Основные части запросу. Строка статуса запроса. Привести примеры

В состав HTTP-запроса, передаваемого клиентом серверу, входят следующие компоненты.

  • Строка состояния (иногда для ее обозначения используют также термины строка-статус, или строка запроса).
  • Поля заголовка.
  • Пустая строка.
  • Тело запроса.

Строку состояния вместе с полями заголовка иногда называют также заголовком запроса.


Рис. 2.1. Структура запроса клиента.

Строка состояния имеет следующий формат:

метод_запроса URL_pecypca версия_протокола_НТТР

Рассмотрим компоненты строки состояния, при этом особое внимание уделим методам запроса.

  1. Поля строки статуса HTTP запроса. Количество полей, их взаимное расположение, разделители.

Строка Статус начинается со строки с названием метода, за которым следует URI-Запроса и использующаяся версия протокола. Строка Статус заканчивается символами CRLF. Элементы строки разделяются пробелами (SP). В Строке Статус не допускаются символы LF и CR, за исключением заключающей последовательности CRLF.

Строка-Статус = Метод SP URI-Запроса SP Версия-HTTP CRLF

Следует отметить, что отличие Строки Статус Полного-Запроса от Строки Статус Простого- Запроса заключается в присутствии поля Версия-HTTP.

Охарактеризовать методы в строке статуса HTTP запроса.

Методы

Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Обратите внимание, что название метода чувствительно к регистру.

Каждый сервер обязан поддерживать как минимум методы GET и HEAD. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.

Кроме методов GET и HEAD, часто применяется метод POST.

 

  1. Метод GET и его особенности. Области применения. Привести примеры. Формат URL. Параметры запроса, привести примеры.

Используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. В этом случае в тело ответного сообщения следует включить информацию о ходе выполнения процесса.

Клиент может передавать параметры выполнения запроса в URI целевого ресурса после символа «?»:
GET /path/resource?param1=value1&param2=value2 HTTP/1.1

Согласно стандарту HTTP, запросы типа GET считаются идемпотентными[4]

Кроме обычного метода GET, различают ещё условный GET и частичный GET. Условные запросы GET содержат заголовки If-Modified-Since, If-Match, If-Range и подобные. Частичные GET содержат в запросе Range. Порядок выполнения подобных запросов определён стандартами отдельно.

  1. Метод POST и его особенности. Области применения. Привести примеры. Формат URL. Параметры запроса, привести примеры.

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

В отличие от метода GET, метод POST не считается идемпотентным[4], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).

При результате выполнения 200 (Ok) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.

Сообщение ответа сервера на выполнение метода POST не кэшируется.

  1. Охарактеризовать основные параметры, описывающие характеристики HTTP запроса. Привести примеры

Host Доменное имя или IP-адрес узла, к которому обращается клиент

Referer URL документа, который ссылается на ресурс, указанный в строке состояния

From Адрес электронной почты пользователя, работающего с клиентом

Accept MIME-типы данных, обрабатываемых клиентом. Это поле может иметь несколько значений, отделяемых одно от другого запятыми. Часто поле заголовка Accept используется для того, чтобы сообщить серверу о том, какие типы графических файлов поддерживает клиент

Accept-Language Набор двухсимвольных идентификаторов, разделенных запятыми, которые обозначают языки, поддерживаемые клиентом

Accept-Charset Перечень поддерживаемых наборов символов

Content-Type MIME-тип данных, содержащихся в теле запроса (если запрос не состоит из одного заголовка)

Content-Length Число символов, содержащихся в теле запроса (если запрос не состоит из одного заголовка)

Range Присутствует в том случае, если клиент запрашивает не весь документ, а лишь его часть

Connection Используется для управления TCP-соединением. Если в поле содержится Close, это означает, что после обработки запроса сервер должен закрыть соединение. Значение Keep-Alive предлагает не закрывать TCP-соединение, чтобы оно могло быть использовано для последующих запросов

User-Agent Информация о клиенте

  1. Охарактеризовать основные параметры, описывающие характеристики тела HTTP запроса. Привести примеры.

HTTP (HyperText Transfer Protocol - RFC 1945, RFC 2616) - протоколприкладногоуровнядляпередачигипертекста.

Во многих случаях при работе в Веб тело запроса отсутствует. При запуске CGI-сценариев данные, передаваемые для них в запросе, могут размещаться в теле запроса.

· Entity-Header — часть заголовка, описывающая данные Entity-Body.
В данной части запроса задаются параметры, которые описывают тело страницы. Entity-Header можетсодержатьследующиепараметры: Allow, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.

· Allow — задает допустимые методы обработки.
Формат: "Allow: GET | HEAD\n".
Параметр игнорируется при указании метода обработки POST в Request-Line. Задает допустимые методы обработки запроса. Прокси сервера не модифицируют параметр Allow и он в неизменном виде доходит до сервера..

· Content-Encoding —типкодированияданных Entity-Body.
Формат: "Сontent-Encoding: x-gzip | x-compress | другойтип\n".
Пример: "Сontent-Encoding: x-gzip\n". Символ "|" означает слово "или", то есть то или то или то и.т.д.
Другой тип может указывать на способ кодирования данных, например, для метода POST: "Сontent-Encoding: application/x-www-form-urlencoded\n".

· Content-Length — количество байт, пересылаемых в Entity-Body. Значение Content-Length имеет совсем другой смысл для данных, пересылаемых в формате MIME, где он выступает как параметр описания части данных — "external/entity-body". Допустимыми являются целые числа от нуля и больше.
Пример: "Content-Length: 26457\n".

  • Content-Type MIME-тип данных, содержащихся в теле запроса (если запрос не состоит из одного заголовка).
    Например: "Content-Type: text/html\n".

· Expires — Время, когда страница должна быть удалена из кэша браузера.
Формат: "Expires: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

· Last-Modified — время последнего изменения пересылаемых данных.
Формат: "Last-Modified: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

· Extention-header — часть заголовка, которая может предназначаться, например, для обработки браузером, или другой программой, которая принимает документ. В данной части можно описывать свои параметры в формате "ParameterName: parametervalue\n". Данные параметры будут игнорироваться, если программа-клиент не знает, как их обработать.
Например: "Cookie: r=1\r\n" — устанавливает всем известные печеньки для страницы.

Пример:

POST http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 35\r\n
\r\n
login=Petya%20Vasechkin&password=qq

Здесь мы видим пример использования Content-Type и Content-Length полей заголовка. Content-Length говорит, сколько байт будет занимать область данных, которая отделяется от заголовка еще одним переводом строки \r\n. А вот параметры, которые раньше для запроса GET помещались в Request-URI, теперь находятся в Entity-Body. Видно, что они формируются точно также, просто надо написать их после заголовка.

  1. Протокол CGI и его характеристики. Область применения. Методы передачи данных от веб сервера в CGI программу и из CGI программы веб серверу.

CGI (CommonGatewayInterface, общий интерфейс шлюза) -- протокол для запуска внешних по отношению к web-серверу приложений (CGI-скриптов), регулирует коммуникацию между HTTP-сервером и CGI-скриптами.

Данная спецификация определяет стандартный способ обмена данными между прикладной программой и HTTP-сервером. Спецификация была предложена для сервера NCSA и является основным средством расширения возможностей обработки запросов клиентов HTTP-сервером.

Область применения:формирование динамических веб-страниц. Прежде всего CGI используется при обработке HTML – форм. Также для создания счетчиков посещений, гостевых книг и чатовых систем.С помощью CGI можно создавать анимацию.

Типы запросов

Различают два типа запросов к CGI-скриптам: по методу GET и по методу POST. В свою очередь, запросы по методу GETподразделяются на запросы по типам кодирования: isindex и form-urlencoded, а запросы по методу POST —multipart/form-data и form-urlencoded.

В запросах по методу GET данные от клиента передаются скрипту в переменной окружения QUERY_STRING. В запросах по методу POST данные из формы передаются в потоке стандартного ввода скрипта. При передаче через поток стандартного ввода в переменной окружения CONTENT_LENGTH указывается число передаваемых символов.

Запрос типа ISINDEX — это запрос вида:

http://intuit.ru/somthing-cgi/cgi-script?word1+word2+word3

Главным здесь является список слов после символа " ?". Слова перечисляются через символ " + " и для кириллицы в шестнадцатеричные последовательности не кодируются. Последовательность слов после символа " ?" будет размещена в переменной окружения QUERY_STRING.

Запрос типа form-urlencoded — это запрос вида:

http://intuit.ru/somthing-cgi/cgi-script?field=word1&field2=word2

Данные формы записываются в виде пар " имя_поля-значение ", которые разделены символом " & ".

Приведенный пример — это обращение к скрипту по методу GET. Все символы после " ?" попадут в переменную окружения QUERY_STRING. При этом если в значениях полей появляется кириллица или специальные символы, то они заменяются шестнадцатиричным кодом символа, который следует за символом " % ".

При обращении к скрипту по методу POST данные после символа " ?" не будут размещаться в QUERY_STRING, а будут направлены в поток стандартного ввода скрипта. В этом случае количество символов в потоке стандартного ввода скрипта будет указано в переменной окружения CONTENT_LENGTH.

При запросе типа multipart/form-data применяется составное тело HTTP-сообщения, которое представляет собой данные, введенные в форме, и данные присоединенного внешнего файла. Это тело помещается в поток стандартного ввода скрипта. При этом к данным формы применяется кодирование как в form-urlencoded, а данные внешнего файла передаются как есть.

  1. Написать PHP программу, которая выводит все данные полученные от веб сервера.

Client

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Client for CGI script</title>

</head>

<body>

 

<form method="POST" action="http://192.1.2.3/pm/pm.cgi"enctype="multipart/form-data">

<p><b>Введите сообщение:</b></p>

<p><textarea rows="10" cols="70" name="data"></textarea></p>

<p><input type="submit" name="sub" value="Отправить"></p>

 

</form>

 

</body>

</html>

Serverpm.cgi

#!/usr/local/bin/php

<?php

echo $_SERVER["QUERY_STRING"];

?>

  1. Написать PHP программу, которая подсчитывает количеству посещений страницы.

<?php
echo "Количествопосещений:\n";
$filename = "count.txt";
$fd = fopen( $filename,"r" );
$cont = fread( $fd, filesize( $filename ) );
fclose( $fd );
$cont=$cont+1;
$fd = fopen( $filename,"w" );
fwrite($fd, $cont);
fclose( $fd );
echo $cont;
echo " раз(а).\n";
?>

  1. Методы получения параметров из HTML форм в PHP программе. Рассмотреть методы передачи GET и POST.

Метод запроса GET

Формат запроса: GET сценарий?параметры HTTP/1.0

» Переменные окружения: REQUEST_URI; в переменной QUERY_STRING сохраняется значение и параметры, в переменной REQUEST_METHOD — ключевое слово GET.

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

Строка сценарий?параметры задается в том же самом формате, в котором она входит в URL. Неплохо было бы назвать эту строку как-нибудь более реалистично, чтобы учесть возможность присутствия в ней командных параметров. Такое название действительно существует и звучит как URI (UniversalResourceIdentifier - Универсальный идентификатор ресурса). Очень часто его смешивают с понятием URL (вплоть до того, что это происходит даже в официальной документации по стандартам HTTP). Под словом URL мы понимаем полный путь к некоторойWeb-странице вместе с параметрами, а URI - это его часть, расположенная после имени (или IP-адреса) хоста и номера порта.

Пускай нам нужно передать в файл три переменных $a, $b и $c методом GETи вывести их сумму на экран. Для этого можно использовать следующий код:

$a = $_GET['a'];
$b = $_GET['b'];

 

$c = $_GET['c'];
$summa = $a + $b + $c;

 

echo "Сумма $a + $b + $c = $summa";

Метод запроса POST

Формат запроса: POST сценарий?параметры HTTP/1.0

» Переменная окружения: REQUEST_URI; в переменной QUERY_STRING сохраняется значение и параметры, в переменной REQUEST_METHOD — слово POST.

Настал момент рассмотреть метод POST. Приведем сразу практический пример метода запроса POST:


POST /script.cgi HTTP/1.0\n
Content-length: 6\n
\n
Hello!

Сервер начнет обработку запроса, не дожидаясь передачи данных после маркера конца заголовков. Иными словами, сценарий запустится сразу же после отправки \n\n, а уж ждать или не ждать, пока придет строка Hello! длиной 6 байт - его дело. Последнее означает, что сервер никак не интерпретирует POST-данные (точно так же, как он не интерпретирует некоторые заголовки), а пересылает их непосредственно сценарию. Но как же сценарий узнает, когда данные кончаются, т. е. когда ему прекращать чтение информации, поступившей от браузера? В этом ему поможет переменная окружения Content-Length, и именно на нее следует ориентироваться.

Зачем нужен метод POST? В основном для того, чтобы передавать большие объемы данных. Например, при загрузке файлов через Web или при обработке больших форм, об этом мы поговорим далее. Кроме того, метод POST часто используют для эстетических целей: дело в том, что при применении GET, как вы, наверное, уже заметили, URL сценария становится довольно длинным и неизящным. Переданные сценарию параметры не отображаются в окне браузера, POST-запрос оставляет URL без изменения.

Код первого файла с формой для отправки данных. Дадим ему название post-1.php

  <!--Форма -->
  <form action="post-2.php" method="post" name="form1" target="_blank">

 

  <!--Текстовые поля -->
  <p><input name="name" type="text" size="20"></p>

 

  <p><input name="lastname" type="text" size="20"></p>
  <!--Кнопка -->

 

  <p><input name="submit" type="submit" value="Передать"></p>
  </form>

 

  1. Написать PHP программу, которая записывает в файл IP адрес и время каждого посещения.

<?php

$filename = "ip.txt";

$date=date("d.m.Y");

$time=date("H:i:s");

$fd = fopen( $filename,"a");

fwrite($fd, $date." ".$time." from ".$REMOTE_ADDR);

fclose( $fd );

?>

  1. Методывзлома PHP сайтов. SQL иньекции.PHP иньекции.


Разновидность web-уязвимостей.

1) XSS атаки
а)Пассивные XSS
б)Активные XSS
2) SQL-инъекции
3) Инклуды
а) Локальные
б) Удаленные

 

SQL-инъекции


SQL-injection (инъекция, инжект) — рзновидность уязвимости, позволяющая подменить и дополнить оригинальный sql-запрос своими данными, что может привести к выводу любой информации, или, что хуже — полному доступу к серверу.
Примеруязвимогокода:
...
$id=$_GET['id'];
$query="SELECT * FROM articles WHERE id='".$id."';
$ret=mysql_query($query);
...

Красным и выделена уязвимая строчка. Если злоумышленник гетом передаст, например, знаечние $id = 13', то кавычка вставится в запрос, что приведет к ошибке и позволит вывести любые данные из базы данных. (Способы рассматривать не буду из определенных побуждений).
Также при некотоырх обстоятельствах у злоумышленника есть возможность даже выполнять php код, что может привести к очень трагичным последствиям.
Способы устранения уязвимости:
1) Самое-самое главное — фильтровать кавычки. Везде — в $_GET, $_POST и даже $_COOKIES Например, заменять "'" на "\'"
2) Не использоать в запросе такие конструкции: ...whereid = $id..., но использовать ...whereid = '$id' с отфильтрованными заранее кавычками.

PHP-инъекция (англ. PHPinjection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Потенциально опасными функциями являются:

· eval(),

· preg_replace() (с модификатором «e»),

· require_once(),

· include_once(),

· include(),

· require(),

· create_function().

PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки.

  1. Язык XML, его характеристика. Сравнительная характеристика XML и HTML. Дать краткую характеристику сопутствующих технологий.

XML (англ. eXtensibleMarkupLanguage — расширяемый язык разметки; произносится [экс-эм-э́л]) — рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML). XML является упрощённым подмножеством языка SGML.

Сравнительная характеристика XML и HTML.

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

Ниже приведены примеры документов, которые не могут быть адекватно описаны с помощью языка HTML.

  • Документ, который не содержит типовых компонентов (заголовков, абзацев, списков, таблиц и т.д.) Например, в языке HTML отсутствуют элементы, необходимые для отображения музыкальных символов или математических уравнений.
  • База данных, такая как каталог книг. Вы можете использовать HTML-страницу, чтобы хранить и отображать информацию из статической базы данных (например, перечень книг и их описание). Однако, если вам понадобится осуществить сортировку, фильтрацию, поиск и обработку информации, придется снабдить каждую из составных частей информации соответствующей меткой (как в программе, работающей с базами данных, такой как MicrosoftAccess). В языке HTML не предусмотрено соответствующих элементов.
  • Документ, который вы хотите представить в виде иерархической структуры. Допустим, вы пишете книгу и хотите разбить ее на части, главы, разделы A, B, C и т.д. В дальнейшем программа может использовать данную структуру документа для создания оглавления, оформления различных уровней в структуре с помощью различных стилей, извлечения определенных разделов, а также обработки информации иными способами. Однако элемент типа заголовок в HTML содержит лишь описание собственно текста. Например:
Содержимое Web-сайта

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

Язык XML позволяет преодолеть эти ограничения.

Extensible Stylesheet Language (XSL) позволяет вам создавать мощные стилевые таблицы с использованием синтаксиса XML.

XML Schema позволяет разрабатывать подробные схемы для ваших XML-документов с использованием стандартного синтаксиса XML, что является более мощной альтернативой применения DTD.

XML Linking Language (XLink) дает возможность связывать ваши XML-документы. Он поддерживает множественные целевые ссылки и другие полезные функции, обеспечивая большую свободу по сравнению с механизмом организации ссылок в HTML.

XML Pointer Language (XPointer) позволяет определять гибкие целевые ссылки. При совместном использовании XPointer и XLink вы можете организовывать ссылки на любое место в целевом документе – а не только переходы к специально выделенным пунктам.

  1. Требования к синтаксису языка XML. Привести пример правильно отформатированных документов и документов нарушающих правила форматирования.

XML - это расширяемый язык разметки, разработанный для размещения информации в сети интернет, наряду с HTML, который давно стал стандартным языком создания Web-страниц. В отличие от HTML, вы имеете возможность создавать ваши собственные элементы и присваивать им любые имена по вашему выбору.

В зависимости от уровня соответствия стандартам документ может быть "верно сформированным" ("well-formed"), либо "валидным" ("valid"). Вот несколько основных правил создания верно сформированного документа:

· Каждый элемент XML должен содержать начальный и конечный тэг (либо пустой тэг типа <TAG />, который может нести информацию посредством своих атрибутов).

· Любой вложенный элемент должен быть полностью определён внутри элемента, в состав которого он входит.

· Документ должен иметь только один элемент верхнего уровня.

· Имена элементов чувствительны к регистру.

Есть три основных способа сообщить браузеру, как отображать каждый из созданных вами XML-элементов:

· Каскадная таблица стилей (CSS) или расширяемая таблица в формате языка стилевых таблиц (XSL).

· Связывание данных. Этот метод требует создания HTML-страницы, связывания с ней XML-документа и установления взаимодействий HTML-элементов с элементами XML. В дальнейшем HTML-элементы автоматически отображают информацию из связанных с ними XML-элементов.

· Написание сценария. Этот метод требует создания HTML-страницы, связывания с ней XML-документа и получение доступа к XML-элементам с помощью кода сценария 6-25836.php">2

  • 3
  • Далее ⇒
  •