Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по Программированию в интернете.docx
Скачиваний:
3
Добавлен:
22.09.2019
Размер:
544.18 Кб
Скачать

Variable Value

GD Support enabled

GD Version bundled (2.0.28 comptible)

GIF Create Support enabled

JPG Support enabled

PNG Support enabled

Создание изображений.

При создании изображений надо выполнить четыре шага:

  1. Создание холста;

  2. Рисование линий, многоугольников и тому подобное или вывод текста;

  3. Вывод рисунка в браузер;

  4. Освобождение ресурсов.

Холст для изображения можно сделать заново или воспользоваться уже имеющимся рисунком, чтобы поверх него дорисовать что-либо или просто вывести в браузер готовое изображение.

Функция imagecreatetruecolor () создаёт холст для изображения, цвет каждой точки которого определяется в координатах цветовой модели RGB (True color), то есть яркость каждого из трёх цветов записывается двумя шестнадцатеричными числами. Функция imagecreatetruecolor () принимает два обязательных параметра – ширину и высоту рисунка и возвращает идентификотор ресурса. При неудаче функция возвращает false.

$im = imagecreatetruecolor ($width, $height);

Идентификатор ресурса $im указывает на изображение и используется для идентификации этого изображения. Переменные $width и $height определяют длину и высоту создаваемого холста. Сам холст рисуется чёрным.

Для использования готовых рисунков различных форматов существует набор функций, принимающих в качастве аргумента имя файла, создающих холст и возвращающих идентификатор изображения: imagecreatefrompng (), imagecreatefromjpeg (), imagecreatefromgif ().

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

Примечание: Положение любой точки в изображении отсчитывается сниз и вправо от левого верхнего угла, координатами которого являются x=0, y=0. Правый нижний угол изображения имеет координаты x=$width, y=$height.

2. Формы в XHTML

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

Табл. 3.1. Элементы форм

Название

Описание

Пример

Однострочное текстовое поле

Предназначено для ввода строки символов с помощью клавиатуры.

Поле для пароля

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

Многострочный текст

Область, в которой можно вводить несколько строк текста.

Кнопка

Элемент формы, на который нужно нажимать.

Кнопка SUBMIT

После нажатия на эту кнопку данные формы отправляются на сервер и обрабатываются программой, указанной параметром action тега FORM.

Кнопка RESET

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

Переключатели (radiobutton)

Используются для выбора только одного варианта из предложенных.

Флажки (checkbox)

Используются для выбора одного и более вариантов из предложенных.

Поле со списком

Предназначен для выбора одного или нескольких значений из списка.

Скрытое поле

Скрытое поле не отображается на странице и прячет свое содержимое от пользователя.

 

Поле с изображением

Аналогично по действию кнопке Submit, но представляют собой рисунок.

Отправка файла

Создает поле для ввода имени файла, который пересылается на сервер.

Каждый элемент формы имеет свои собственные параметры, которые влияют на его вид.

ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 12

1. Cookies и управление сессиями.

Cookie – это небольшой фрагмент информации, который серверные сценарии сохраняют на клиентской машине.

При работе с сессиями различают следующие этапы:

  • Открытие сессии,

  • Регистрация переменных сессии и их использование.

  • Закрытие сессии.

Открывается сессия в php при помощи функции session_start(). Cначала создадим страничку.

<html>

<head><title>Регистрация</title></head>

<body>

<form method=”GET” action=”sess1.php”>

Введите имя:

<input type=”text” name=”name” value=””>

<input type=”submit” value=”Готово”>

</form>

</body>

</html>

Теперь напишем сценарий для создания сессии.

<?php

session_start();

$new = $_GET[“name”];

$_SESSION[‘new’] = $new;

echo “Здравствуйте, “.$_SESSION[‘new’];

?>

<br/> Щелкните по ссылке, когда будете готовы начать тест:<br/>

<a href = “sess2.php”>Начать тест!</a>

Теперь напишем сценарий чтения переменной сессии.

<?php

session_start();

$var = $_SESSION [‘new’];

echo $var.”, ответьте, пожалуйста, на вопрос. <br/>”;

?>

<a href=”sess3.php”>Завершить тест</a>

И, наконец, напишем сценарий закрытия сессии.

<?php

session_start();

$sess = $_SESSION[“new”];

echo $sess.”, тест пройден!<br/>”;

unset($_SESSION[‘new’]);

echo “Ваш тест окончен!”;

session_destroy();

?>

Где функция unset() удаляет прееменную из сессии, а функция session_destroy() закрывает сессию.

Ку́ки (слово не склоняется; от англ. cookie — печенье) — небольшой фрагмент данных, созданный веб-сервером и хранимый на компьютере пользователя в виде файла, который веб-клиент (обычно веб-браузер) каждый раз пересылает веб-серверу в HTTP-запросе при попытке открыть страницу соответствующего сайта. Применяется для сохранения данных на стороне пользователя, на практике обычно используется для:

аутентификации пользователя;

хранения персональных предпочтений и настроек пользователя;

отслеживания состояния сессии доступа пользователя;

ведения статистики о пользователях.

Без куки не могут функционировать многие сайты с ограничениями доступа, большинство интернет-магазинов.[1] Настройка оформления и поведения многих веб-сайтов по индивидуальным предпочтениям пользователя тоже основана на куки.[2]

С момента своего появления, куки вызывали обеспокоенность пользователей Интернета, поскольку слежение за действиями и предпочтениями пользователей может подвергнуть опасности тайну личной жизни. Как результат, в Европейском Союзе, Соединённых Штатах, и в других странах были приняты соответствующие законы, регулирующие применение куки. С другой стороны, куки подвергаются критике также потому, что они не всегда точно идентифицируют пользователей, а это может повлечь атаки злоумышленников .

Имеется и ряд заблуждений о куки. Они главным образом основаны на уверенности людей, что куки являются компьютерными программами. На самом деле, куки — это простые текстовые данные и они не могут выполнять какие-либо действия самостоятельно. В частности, куки не могут быть ни вирусами, ни шпионскими программами.

Большинство современных браузеров позволяют пользователям выбрать — принимать куки или нет, но их отключение делает невозможной работу с некоторыми сайтами. Например, с интернет-магазинами.

Назначение

Куки используются веб-серверами для различения пользователей и хранения данных о них.

К примеру, если вход на сайт осуществляется при помощи куки, то после ввода пользователем своих данных на странице входа куки позволяют серверу запомнить, что пользователь уже идентифицирован и ему разрешён доступ к соответствующим услугам и операциям.[2]

Многие сайты также используют куки для сохранения настроек пользователя. Эти настройки могут использоваться для персонализации, которая включает в себя выбор оформления и функциональности. Например, Википедия позволяет авторизованным пользователям выбрать дизайн сайта. Поисковая система Google позволяет пользователям (в том числе и не зарегистрированным в ней) выбрать количество результатов поиска, отображаемых на одной странице.[3]

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

Понятие

Возможное взаимодействие между браузером и сервером.

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

Спецификации[5][6] указывают минимальные объёмы, которые должны предоставляться браузерами для хранения куки. Так, браузер должен хранить по меньшей мере 300 куки по 4096 байт каждая, и по меньшей мере 20 куки для одного сервера или домена.

Популярные браузеры имеют соответствующий максимум хранящихся куки для каждого домена:

Firefox 1.5 — 50

Firefox 2.0 — 50

Opera 9 — 30

Internet Explorer 6 — 20 (с обновлением от 14 августа 2007 увеличена до 50)

Internet Explorer 7 — 20 (с обновлением от 14 августа 2007 увеличена до 50)

На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, Internet Explorer предоставляет 4096 байт для всех куки в одном домене.

Имена куки нечувствительны к регистру в соответствии с разделом 3.1 RFC 2965.

Куки могут устанавливать дату их удаления, в этом случае они будут автоматически удалены браузером в указанный срок. Если дата удаления не указана, куки удаляются сразу, как только пользователь закроет браузер. Таким образом, указание даты истечения позволяет сохранить куки более чем на одну сессию и такие куки называются постоянными. Например, интернет-магазин может использовать постоянные куки для хранения кодов предметов, которые пользователь поместил в корзину покупок — и даже если пользователь закроет браузер, не совершив покупки, при последующем входе ему не придётся формировать корзину заново.

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

История

По одной из версий термин «куки» (печенье) происходит от «волшебного печенья»[7] — набора данных, которые программа получает и затем отправляет обратно неизменными. В июне 1994 года Лу Монтулли пришла идея использовать их при веб-соединении.[8] В то время он был сотрудником Netscape Communications, которая разрабатывала по заказу пакет электронной коммерции. Куки стали решением проблемы надёжной реализации виртуальной корзины покупок.

С помощью Джона Гианнандреа в тот же год Монтулли написал начальную спецификацию куки. Mosaic Netscape 0.9beta, выпущенная 13 октября 1994 года,[9][10] уже поддерживала куки. Куки впервые начали использоваться вне лаборатории на сайте Netscape и определяли, посещал ли пользователь сайт ранее. Монтулли подал заявку на патент в 1995 году и получил его в 1998 году. Internet Explorer начал поддерживать куки с версии 2, выпущенной в октябре 1995 года.[11]

Хотя некоторые люди знали о существовании куки уже в первом квартале 1995 года,[12] широкая общественность узнала о них лишь после статьи в «Financial Times» от 12 февраля 1996 года. В том же году куки оказались в центре внимания средств массовой информации, особенно из-за потенциальной угрозы приватности. Куки были рассмотрены в Федеральной комиссии по торговле США в двух слушаниях в 1996 и 1997 годах.

Развитие спецификаций куки на этом не остановилось. В частности, первые обсуждения формальной спецификации начались в апреле 1995 года. Была сформирована специальная рабочая группа в рамках IETF. В качестве отправной точки была выбрана спецификация Netscape. В феврале 1996 года рабочая группа определила сторонние куки как серьёзную угрозу приватности. Выработанная спецификация была выпущена под названием RFC 2109 в феврале 1997 года. В ней указывалось, что сторонние куки должны либо блокироваться, либо хотя бы не работать по умолчанию.

В то время рекламные компании уже вовсю использовали сторонние куки и рекомендации RFC 2109 не поддерживались ни в браузерах Netscape, ни в Internet Explorer. Позднее, в октябре 2000 года, RFC 2109 была заменена новой спецификацией RFC 2965.

Заблуждения

С момента появления куки, в СМИ и Интернете начали распространяться различные слухи.[13] В 1998 году компьютерный отдел Министерства энергетики Соединенных Штатов (CIAC) заявил, что опасности куки не представляют, и пояснил, что «информация о том, откуда вы приходите и какие веб-страницы посещаете, и так сохраняется в лог-файлы веб-серверов».[14] В 2005 году были опубликованы результаты исследования,[15] согласно которому значительный процент респондентов уверен, что:

куки, как черви и вирусы, могут стереть данные с жёсткого диска пользователя;

куки являются причиной всплывающих окон;

куки используются для почтового спама;

куки используются только для рекламы.

В действительности же, куки представляют собой лишь данные, а не программный код: они не могут стереть или прочитать информацию с компьютера пользователя.[16] Однако куки позволяют проследить, какие веб-страницы просмотрены пользователем на данном сайте, и эта информация может быть сохранена в профиле пользователя. Такие профили зачастую анонимны и не содержат личной информации пользователей (имя, адрес и т. д.). Точнее, они не могут её содержать, пока пользователь не сделал эту информацию доступной. Но даже несмотря на анонимность, эти профили стали предметом споров о сохранении приватности.

Установка куки

Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице http://www.example.org/index.html, браузер отправляет на сервер www.example.org следующий запрос:

GET /index.html HTTP/1.1 Host: www.example.org

браузер

сервер

Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить куки:

HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value   (содержимое страницы)

браузер

сервер

Строка Set-cookie отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил куки. В этом случае, если куки поддерживаются браузером и их приём включён, браузер запоминает строку name=value (имя = значение) и отправляет её обратно серверу с каждым последующим запросом. Например, при запросе следующей страницы http://www.example.org/spec.html браузер пошлёт серверу www.example.org следующий запрос:

GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value Accept: */*  

браузер

сервер

Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые куки.

Значение куки может быть изменено сервером путём отправления новых строк Set-Cookie: name=newvalue. После этого браузер заменяет старое куки с тем же name на новую строку.

Строка Set-Cookie, как правило, добавляется к HTTP-ответу не самим HTTP-сервером, а CGI-программой, работающей вместе с ним. HTTP-сервер только отправляет браузеру результат работы такой программы.

Куки также могут устанавливаться программами на языках типа JavaScript, встроенными в текст страниц, или аналогичными скриптами, работающими в браузере. В JavaScript для этого используется объект document.cookie. Например, document.cookie = "temperature=20" создаст куки под именем «temperature» и значением 20.[17]

Атрибуты куки

Кроме пары имя/значение, куки может содержать срок действия, путь и доменное имя. RFC 2965 также предусматривает, что куки должны обязательно иметь номер версии, но это используется редко. Эти атрибуты должны идти после пары name=newvalue и разделяться точкой с запятой. Например:

Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org.

Образец HTTP-ответа google.com, содержащем куки с атрибутами.

Домен и путь говорят браузеру, что куки должна быть отправлена обратно на сервер при запросах URL для указанного домена и пути. Если они не указаны, используются домен и путь запрошенной страницы[6].

Фактически, куки определяются тройкой параметров имя-домен-путь (оригинальная спецификация Netscape учитывала только пару имя-путь[5]). Иными словами, куки с разными путями или доменами являются разными куки, даже если имеют одинаковые имена. Соответственно, куки меняется на новое, только если новое куки имеет те же имя, путь и домен.

Дата истечения указывает браузеру, когда удалить куки. Если срок истечения не указан, куки удаляется по окончании пользовательского сеанса, то есть с закрытием браузера. Если же указана дата истечения срока хранения, куки становится постоянной до указанной даты. Дата истечения указывается в формате «Нед, ДД-Мес-ГГГГ ЧЧ:МM:СС GMT». Например:

Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net

куки из примера выше имеет имя RMID и значение «732423sdfs73242». Срок его хранения истечёт 31 декабря 2010 года в 23:59:59. Путь «/» и домен «example.net» показывают браузеру, что нужно отправить куки при просмотре любой страницы в домене example.net[18].

Условия истечения срока хранения

Срок хранения куки истекает в следующих случаях:[19]

В конце сессии (например, когда браузер закрывается), если куки не являются постоянными.

Дата истечения была указана и срок хранения вышел.

Дата истечения срока хранения изменена сервером или скриптом на уже прошедшую дату.

Браузер удалил куки по запросу пользователя.

Третий способ позволяет серверу или скрипту удалённо стирать куки. Заметим, что сервер не может узнать, когда истекают сроки хранения куки, поскольку браузер не отправляет на сервер эту информацию.

Аутентификация

Куки могут использоваться сервером для опознания ранее аутентифицированных пользователей. Это происходит следующим образом:[20]

Пользователь вводит имя пользователя и пароль в текстовых полях страницы входа и отправляет их на сервер.

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

Каждый раз, когда пользователь запрашивает страницу с сервера, браузер автоматически отправляет куки с идентификатором сессии серверу. Сервер проверяет идентификатор по своей базе идентификаторов и, при наличии в базе такого идентификатора, «узнаёт» пользователя.

Этот метод широко используется на многих сайтах, например на Yahoo!, в Википедии, в Facebook.

Настройка браузера

Просмотр и настройка куки в браузере Firefox 3.0

Большинство современных браузеров поддерживают куки.[21] И, как правило, пользователь может выбрать, должны куки использоваться или нет. Наиболее распространены следующие настройки браузеров:[18]

Полное отключение куки.

Удаление куки при закрытии браузера.

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

Обработка куки на основе «белого» и/или «чёрного» списков, обновляемых пользователем или изготовителем браузера. Куки из «чёрного списка» блокируются.

Запрет куки от определённых доменов (разновидность «чёрного списка»).

Установка разумных сроков истечения куки.

Большинство браузеров, поддерживающих JavaScript, позволяют пользователю увидеть активные на данном сайте куки, набрав javascript:alert("Cookies: "+document.cookie) в адресной строке браузера[18]. Некоторые браузеры содержат менеджер куки, позволяющий пользователю выборочно просмотреть и удалить куки, хранящиеся в браузере.

Приватность и сторонние куки

Куки значительным образом влияют на конфиденциальность и анонимность пользователей Интернета. Хотя куки отправляются только на серверы домена, для которого они предназначены, веб-страница может подгружать изображения или другие компоненты из других доменов. Куки, получаемые во время подгрузки этих компонентов из других доменов, называются «сторонними».

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

Рекламные компании используют сторонние куки для отслеживания перемещений пользователя по сайтам. В частности, рекламная компания может отслеживать пользователей на всех сайтах, где установлены их рекламные баннеры. Знание страниц, посещённых пользователем, позволяет менять направленность рекламы в зависимости от предпочтений пользователя.

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

Правительство Соединенных Штатов приняло строгие законы в отношении куки в 2000 году, после того, как выяснилось, что Агентство по борьбе с наркотиками США использовало куки для отслеживания пользователей, просмотревших их антинаркотическую рекламу в сети. В 2002 году Дэниел Брандт установил, что ЦРУ устанавливает на компьютеры постоянные куки со сроком хранения до 2010 года. Когда ЦРУ было уведомлено о неправомерности подобного использования куки, управление заявило, что это было непреднамеренно и прекратило их установку.[22] 25 декабря 2005 года Брандт обнаружил, что Агентство национальной безопасности оставляло пару постоянных куки после обновления программного обеспечения. После этого сообщения Агентство немедленно отключило куки.[23]

Директива Евросоюза о конфиденциальности электронных данных от 2002 года[24] содержит нормы, касающиеся использования куки. В частности, пункт 3 статьи 5 устанавливает, что хранение данных (в том числе куки) может осуществляться лишь если:

пользователю предоставляется информация о том, как эти данные используются;

пользователь имеет возможность отказаться от этого.

Тем не менее, в данной статье также говорится, что хранение технически необходимых данных освобождается от этих норм. Ожидалось, что директива вступит в силу с октября 2003 года, но доклад от декабря 2004 года отмечает, что эти положения не нашли применения на практике и что в некоторых государствах (Словакия, Латвия, Греция, Бельгия и Люксембург) эти положения не внесены в национальные законодательства. Доклад предлагает провести тщательный анализ ситуации в государствах, участвующих в договоре.

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

Многие веб-браузеры, включая Safari от Apple и Internet Explorer версий 6 и 7 от Microsoft, поддерживают спецификации P3P, которые позволяют определить, следует ли разрешать сторонние куки. Веб-браузер Opera позволяет пользователям отказаться от сторонних куки и создать глобальные или выборочные профили безопасности для веб-доменов.[25] Firefox 2 был лишён этой опции, но она была восстановлена в версии 3.

Недостатки куки

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

Неточная идентификация

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

Аналогично, куки не различают пользователей, пользующихся одним компьютером и браузером, если не используются разные учётные записи в операционной системе.

Взлом куки

Во время нормальной эксплуатации сервер и браузер пользователя постоянно обмениваются куки. Поскольку куки могут содержать конфиденциальную информацию (имя пользователя, условия доступа и т. д.), их содержимое не должно быть доступно другим. Кража куки — это акт несанкционированного перехвата куки посторонними.

Куки могут быть украдены другим компьютером, читающим трафик сети.

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

Эта проблема может быть решена путём установления между пользователем и сервером шифрованного соединения с использованием протокола HTTPS. Сервер также может использовать специальный флаг при установке куки, после чего браузер будет передавать их только по надёжному каналу, например, через SSL-соединение.[6]

Однако большое число веб-сайтов, даже использующих безопасные HTTPS-сессии для идентификации пользователя, затем отправляют куки и другие данные более простым незашифрованным HTTP-соединением. Злоумышленники могут легко перехватить куки других пользователей и использовать их на соответствующих веб-сайтах.[26]

Межсайтовый скриптинг: куки должны обмениваться лишь между сервером и клиентом, а отправляются третьей стороне.

Другой способ кражи куки — межсайтовый скриптинг и несанкционированная отправка куки на серверы, которые не должны получать их. Современные браузеры могут исполнять фрагменты кода, полученные с сервера. Если куки доступны во время этого исполнения, их содержимое может в той или иной форме оказаться на серверах, которые не должны получать к ним доступ. Шифрование куки не поможет в этом случае.[27]

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

Эти атаки можно предотвратить установкой флага HttpOnly,[28] делающей куки недоступными для скриптов со стороны клиента. Тем не менее, веб-разработчики должны предусматривать защиту от межсайтового скриптинга на стадии разработки веб-сайтов.[29]

Отравление куки

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

Хотя теоретически куки должны сохраняться и отправляться назад на сервер неизменными, злоумышленник может изменить их содержимое перед отправкой. К примеру, куки могут содержать общую сумму, которую пользователь должен уплатить за свои покупки; изменив это значение, злоумышленнику придётся платить меньше установленной суммы. Процесс изменения содержимого куки называется отравлением куки.

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

Межсайтовые куки

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

Каждый сайт должен иметь свои собственные куки, и сайт example.com не должен изменять или устанавливать куки другого сайта example.org. Уязвимости веб-браузеров позволяют вредоносным сайтам нарушать это правило. Это похоже на отравление куки, но здесь злоумышленник атакует пользователей с уязвимыми браузерами, а не сайт напрямую. Целью таких атак могут быть идентификаторы сессий.

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

Нестабильность между клиентом и сервером

Куки могут вызвать противоречия между клиентом и сервером. Если пользователь получает куки, а затем нажимает кнопку «Назад» в браузере, то состояние браузера уже другое по сравнению с моментом получения куки. Для примера возьмем электронный магазин с корзиной покупок, основанной на применении куки: пользователь добавляет покупку в корзину, затем нажимает кнопку «Назад», но покупка остаётся в корзине, хотя пользователь, возможно, хотел отменить покупку. Это может привести к путанице и ошибкам. Веб-разработчики должны помнить об этом и принимать меры для решения таких ситуаций.

Истечение куки

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

Альтернативы куки

Некоторые операции, для которых используются куки, могут быть реализованы с помощью других механизмов. Тем не менее, эти альтернативы имеют свои недостатки, которые делают куки порой более предпочтительными на практике. Большинство этих альтернатив позволяет отслеживать пользователя, хотя и менее надёжным способом, чем куки. Как результат, неприкосновенность частной жизни остаётся под угрозой, даже если куки отключены браузером или не устанавливаются сервером.

IP-адрес

Этот ненадёжный метод отслеживания пользователей основан на хранении IP-адресов компьютеров, просматривающих страницы. Данная техника доступна с самого появления World Wide Web, которая требует знания IP-адреса клиента для загрузки страницы. Эту информацию можно хранить на сервере вне зависимости от того, используются куки или нет.

Тем не менее этот способ менее надёжен, чем куки, поскольку компьютеры и прокси могут совместно использоваться несколькими пользователями, а один компьютер может использовать разные IP-адреса в разных сессиях (чаще всего это относится к коммутируемому соединению, т. н. dial-up).

Отслеживание по IP-адресу может оказаться невозможным и при использовании систем сохранения анонимности (например, Tor). В таких системах один браузер может иметь несколько IP-адресов, и несколько пользователей могут использовать один IP-адрес, в результате чего отслеживание IP-адрес не представляется возможным.

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

URL (строка запроса)

Более прогрессивная методика основана на встраивании данных в URL. Обычно для этого используется строка запроса, но так же могут задействоваться и другие части URL. Языки Java и PHP активно используют эти механизмы при отключенных куки.

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

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

Более того, даже если пользователь повторно обращается к одной и той же странице, нет никакой гарантии, что строка запроса останется неизменной. Например, при переходе с внутренних страниц сайта и с внешних поисковых систем, строки запроса будут разным, когда куки оставались бы одинаковыми.

Другой недостаток строки запроса проявляется в вопросах безопасности: хранение идентификатора сессии в строке запроса упрощает проведение атаки. Передача идентификатора в куки более безопасна.

Скрытые поля формы

Одним из способов отслеживания сессии с помощью ASP .NET является использование веб-форм со скрытыми полями. Этот метод очень похож на строку запроса URL и обладает почти теми же преимуществами и недостатками, а если параметры формы отправляются HTTP-методом GET, то поля фактически станут частью URL, который браузер отправит на сервер. Но большинство форм обрабатывается HTTP POST, при которой информация не является ни частью URL, ни куки.

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

HTTP-аутентификация

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

Сохранение на клиентской стороне

Некоторые веб-браузеры позволяют странице сохранять информацию локально для последующего извлечения. Internet Explorer, например, поддерживает сохранение информации в истории, избранном, XML хранилище, или позволяет провести прямое сохранение веб-страницы на диск.[31]

Немного отличный механизм используются в браузерах, кеширующих java-скрипты, используемые в веб-странице. Например, страница может содержать ссылку <script type="text/javascript" src="example.js">. С загрузкой страницы загружается и example.js. Затем скрипт кэшируется и не требует загрузки при повторном посещении страницы. В результате, если скрипт содержит такое значение, как id=3243242, этот идентификатор остаётся в силе и может быть использован другим java-скриптом или другой страницей, запрашивающей этот скрипт.

Класс для работы с сессиями

Класc Session позволяет вам хранить информацию о пользователе и отслеживать его активность пока он находятся на вашем сайте. Класс Session хранит информацию о каждом пользователе как упорядоченную(при необходимости зашифрованную) информацию в cookies. Так же он может сохранять информацию в таблице базы данных - для дополнительной безопасности, это позволяет сопоставлять идентификатор сессии сохраненный в кукисах с идентификатором сохраненным в базе данных. По умолчанию информация сохраняется лишь в cookies. Если вы захотите использовать базу данных для хранения информации о сессии, то вам будет необходимо создать таблицу как указано ниже.

Примечание: Класс Session не использует родные PHP сессии. Он генерирует свои специфические данные, что позволяет разработчикам получить более гибкие возможности.

Создание сессии

Класс Session, как правило, необходим на каждой странице, так что он должен быть инициализирован в конструкторе вашего контроллера, либо автоматически подключаться с помощью application/config/autoload.php.

Для того чтобы инициализировать класс Session вручную в конструкторе вашего контроллера используйте функцию $this->load->library:

$this->load->library('session');

После загрузки объект класс Session станет доступным: $this->session

Как работает класc Session ?

Когда страница загружена класс Session проверит - есть ли в cookies пользователя корректные на данный момент данные сессии. Если данных нет(или они устарели) то будет создана новая сессия, которая будет сохранена в cookies. Если сессия существует, то информация о ней будет обновлена, соответственно cookies тоже будет обновлены. С каждым обновлением session_id будет заменятся на вновь сгенерированный session_id.

Важно понять, что будучи инициализированным класс Session далее работает самостоятельно. Нет ничего, что вам предстоит сделать для того чтобы он работал. Вы сможете работать с данными сессии, или даже добавлять собственные данные в сессию пользователя, однако процесс чтения, записи и обновления сессии является автоматическим.

Что такое данные сессии?

Сессия является массивом содержащим следующую информацию::

  • Уникальный ID сессии (случайная строка, закодированная алгоритмом md5, генерируется заново каждые 5 минут(по умолчанию))

  • IP адрес пользователя

  • User Agent пользователя(первые 50 символов)

  • Время последней активности(timestamp)

Вся эта информация хранится в cookies как упорядоченный массив, соответствующий этому примеру:

[array] (      'session_id'    => random hash,      'ip_address'    => 'string - user IP address',      'user_agent'    => 'string - user agent data',      'last_activity' => timestamp )

Если вы используете возможность шифрования данных сессии, то массив будет сначала зашифрован, а затем сохранен в cookies пользователя. Это повышает безопасность хранения информации и делает невозможным ее чтение либо изменение третьими лицами. Больше про шифрование вы можете найти здесь, класс Session производит шифрование данных автоматически.

Примечание: Чтобы снизить нагрузку на процессор, по умолчанию cookies обновляются каждые 5 минут. Если вы часто обновляете страницу, то можете заметить, что время последней активности обновляется только тогда, когда пройдет около пяти минут, с того времени как cookies были записаны в прошлый раз. Это время можно регулировать, изменяя параметр $config['time_to_update'] в файле system/config/config.php

Получение данных сессии

Любой элемент массива сессии становится доступным с помощью следующей функции:

$this->session->userdata('item');

Где item является индексом массива сессии. Например, для того чтобы получить ID сессии необходимо сделать так:

$session_id = $this->session->userdata('session_id');

Примечание: Функция возвращает FALSE если параметра который вы пытаетесь получить не существует.

Добавление данных в сессию

Сессии позволяют сохранять собственную информацию в cookies пользователя. Зачем это нужно? Вот пример:

Допустим, что пользователь залогинился на вашем сайте. После авторизации вы можете добавить его username и email в cookies сессии, что сделает эту информацию доступной везде - без необходимости подключения к базе данных.

Для того чтобы добавить информацию в массив сессии необходимо передать собственный массив(массив с новой информацией) в эту функцию:

$this->session->set_userdata($array);

Где $array является ассоциативным массивом, который содержит вашу новую информацию. Пример:

$newdata = array(                    'username'  => 'johndoe',                    'email'     => 'johndoe@some-site.com',                    'logged_in' => TRUE                ); $this->session->set_userdata($newdata);

Если вам необходимо добавить одно значение, то вы можете воспользоваться следующим синтаксисом функции set_userdata():

$this->session->set_userdata('some_name', 'some_value');

Примечание: cookies могут содержать только 4kb информации, следите за тем чтобы не превысить этот объем. Зашифрованная информация занимает больше места чем не зашифрованная.

Удаление данных сессии

Так же как set_userdata() может быть использована для добавления информации в сессию, unset_userdata() может быть использована для удаления этой информации. Например, если вы хотите удалить 'some_name' из вашей сессии:

$this->session->unset_userdata('some_name');

Эта функция так же поддерживает ассоциативный массив элементов, которые необходимо удалить:

$array_items = array('username' => '', 'email' => ''); $this->session->unset_userdata($array_items);

Flashdata

CodeIgniter поддерживает "flashdata", эта возможность позволяет сделать данные сессии доступными только для следующего запроса сервера, а после этого они будет автоматически удалены. Эта возможность может оказаться очень полезной, чаще всего ее используют для хранения статусных сообщений(например: "запись 2 удалена").

Примечание: Flash данные начинаются с префикса "flash_", так что избегайте его в именах своих собственных данных.

Для того чтобы добавить flashdata необходимо:

$this->session->set_flashdata('item', 'value');

Вы можете передать массив в качестве параметра set_flashdata(), это выглядит так же как и с функцией set_userdata().

Для того чтобы прочесть переменную flashdata необходимо:

$this->session->flashdata('item');

Если вам необходимо сохранить flashdata переменную, т.е. сохранить ее на еще один запрос сервера, вы можете сделать это с помощью функции keep_flashdata():

$this->session->keep_flashdata('item');

Сохранение данных о сессии в базу данных

Пока информация хранящаяся в cookies пользователя содержит ID сессии, вы не имеете возможности проверить его, в отличие от варианта когда данные сессии хранятся в базе данных. Для приложений, которые не требуют высокого уровня безопасности, проверка ID сессии не является обязательной, однако, если ваше приложение требует высокого уровня безопасности, то проверка становится обязательной.

Если данные сессии находятся в базе данных, то каждый раз, когда в cookies пользователя обнаруживается рабочая сессия, осуществляется запрос к базе данных - с целью сравнить ID сессий. Если ID сессии не совпадают, то сессия разрушается. ID сессии никогда не обновляется, он может быть лишь сгенерированным, когда сессия создается.

Если вы хотите размещать сессии в базе данных, то сперва необходимо создать таблицу для этих целей. Ниже приведен простейший пример для субд mysql:

Примечание: по умолчанию таблица называется ci_sessions, однако вы можете назвать ее как захотите - для этого необходимо изменить файл application/config/config.php. После того как вы создали таблицу вы можете активировать возможность сохранения данных сессии в базе данных в вашем config.php:

$config['sess_use_database'] = TRUE;

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

Убедитесь, что вы правильно указали название таблицы в файле конфигурации:

$config['sess_table_name'] = 'ci_sessions";

Примечание: Класс Session содержит встроенный чистильщик мусора, который удаляет истекшие сессии, так что у вас нет необходимости писать собственный.

Уничтожение сессий

Для того чтобы очистить текущую сессию:

$this->session->sess_destroy();

Примечание: Эта функция должна вызываться последней, после ее вызова даже flash переменные становятся не доступными. Если вам необходимо уничтожить лишь некоторые переменные, то воспользуйтесь unset_userdata().

Настройка класса Session

Все ниже представленные настройки содержатся в файле application/config/config.php:

Значение

По умолчанию

Варианты

Описание

sess_cookie_name

ci_session

Нет

Имя cookies куда будет сохранятся сессия.

sess_expiration

7200

Нет

Количество секунд по прошествии которых сессия считается истекшей. Значение по умолчанию 2 часа. Ели вы ходите чтобы ваша сессия была бесконечной, то выставляйте значение 0.

sess_encrypt_cookie

FALSE

TRUE/FALSE (boolean)

Шифровать ли информацию сессии?

sess_use_database

FALSE

TRUE/FALSE (boolean)

Размещать ли информацию о сессии в базе данных? (Вы должны создать таблицу до того как активируете эту опцию).

sess_table_name

ci_sessions

Любое SQL-корректное имя таблицы

Имя таблицы где будет хранится информация о сессиях.

sess_time_to_update

300

Время в секундах

Опция отвечает за то как часто класс Session будет регенирировать ID сессии.

sess_match_ip

FALSE

TRUE/FALSE (boolean)

Сверять ли IP пользователя, во время чтения данных сессии? (Обратите внимание, что некоторые интернет провайдеры динамически меняют IP. Так что если вы хотите использовать бесконечные сессии, то выставьте данную опцию в значение FALSE)

sess_match_useragent

TRUE

TRUE/FALSE (boolean)

Сверять ли User Agent во время чтения данных сессии?

2. Таблицы в XHTML.

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

Создание таблиц

Для добавления таблицы на веб-страницу используется тег <TABLE>. Этот элемент служит контейнером для элементов, определяющих содержимое таблицы. Любая таблица состоит из строк и ячеек, которые задаются с помощью тегов <TR> и <TD> соответственно. Таблица должна содержать хотя бы одну ячейку (пример 11.1). Допускается вместо тега <TD> использовать тег <TH>. Текст в такой ячейке отображается браузером обычно жирным шрифтом и выравнивается по центру. В остальном, разницы между ячейками, созданными через теги <TD> и <TH>, нет.

Пример 11.1. Создание таблицы

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <table border="1" width="100%" cellpadding="5">  <tr>   <th>Ячейка 1</th>   <th>Ячейка 2</th>  </tr>  <tr>   <td>Ячейка 3</td>   <td>Ячейка 4</td>  </tr> </table> </body> </html>

Вид таблицы, полученной в данном примере, показан ниже.

Ячейка 1

Ячейка 2

Ячейка 3

Ячейка 4

Ячейки формируются по строкам, вначале указывается первая строка, затем вторая и т.д.

Параметры таблиц

Тот факт, что таблицы применяются достаточно часто и не только для отображения табличных данных обязан не только их гибкости и универсальности, но и обилию параметров тегов <TABLE>, <TR> и <TD>. Далее перечислены параметры тега <TABLE>.

ALIGN

Задает выравнивание таблицы по краю окна браузера. Допустимые значения: left ? выравнивание таблицы по левому краю, center ? по центру и right ? по правому краю.

BGCOLOR

Устанавливает цвет фона таблицы.

BORDER

Устанавливает толщину рамки в пикселах. По умолчанию рамка изображается трехмерной, но если используется параметр bordercolor тега <TABLE>, то вид рамки меняется. Когда в теге <TABLE> используется параметр border без аргументов (<table border>), то браузер отображает рамку толщиной один пиксел.

BORDERCOLOR

Устанавливает цвет рамки таблицы. Рамка обычно рисуется как трехмерная, добавление параметров bordercolor и border к тегу <TABLE> создают однотонную линию.

CELLPADDING

Определяет расстояние между границей ячейки и ее содержимым. Этот параметр добавляет пустое пространство к ячейке, увеличивая тем самым ее размеры. Без параметра cellpadding текст в таблице ?налипает? на рамку, снижая тем самым его восприятие. Добавление же cellpadding позволяет улучшить читабельность текста. При отсутствии границ особого значения этот параметр не имеет, но может помочь, когда требуется установить пустой промежуток между ячейками.

CELLSPACING

Задает расстояние между внешними границами ячеек. Если установлен параметр border, толщина границы принимается в расчет и входит в общее значение.

HEIGHT

Устанавливает высоту таблицы. В спецификации HTML 4 этого параметра нет, однако браузеры в большинстве случаев понимают его, если он установлен у тега <TABLE>. Если высота таблицы не указана, то берется суммарное значение параметра height у тега <TD>, в противном случае высота вычисляется на основе содержимого таблицы.

WIDTH

Задает ширину таблицы. Если общая ширина содержимого превышает указанную ширину таблицы, то браузер будет пытаться ?втиснуться? в заданные размеры за счет форматирования текста. В случае, когда это невозможно, например, в таблице находятся изображения, параметр width будет проигнорирован, и новая ширина таблицы будет вычислена на основе ее содержимого. Как и в случае с высотой, если ширина явно не указана, то она будет вычисляться на основе содержимого таблицы.

Параметры ячеек

Каждая ячейка таблицы, задаваемая через тег <TD>, в свою очередь тоже имеет свои параметры, часть из которых совпадает с параметрами тега <TABLE>.

ALIGN

Задает выравнивание содержимого ячейки по горизонтали. Возможные значения: left ? выравнивание по левому краю, center ? по центру и right ? по правому краю.

BGCOLOR

Устанавливает цвет фона ячейки. Используя этот параметр совместно с атрибутом bgcolor тега <TABLE> можно получить разнообразные эффекты в таблице.

BORDERCOLOR

Устанавливает цвет рамки вокруг ячейки. Рамка показывается, когда установлен параметр border с ненулевым значением у тега <TABLE>.

COLSPAN

Устанавливает число ячеек, которые должны быть объединены по горизонтали. Этот параметр имеет смысл для таблиц, состоящих из нескольких строк. Например, как для таблицы, показанной ниже, где используется горизонтальное объединение ячеек.

Ячейка 1

Ячейка 2

Ячейка 3

В данной таблице содержатся две строки и две колонки, причем верхние горизонтальные ячейки объединены с помощью параметра colspan.

HEIGHT

Браузер сам устанавливает высоту таблицы и ее ячеек исходя из их содержимого. Однако при использовании параметра height высота ячеек будет изменена. Здесь возможны два варианта. Если значение height меньше, чем содержимое ячейки, то этот параметр будет проигнорирован. В случае, когда установлена высота ячейки, превышающая ее содержимое, добавляется пустое пространство по вертикали.

NOWRAP

Добавление параметра nowrap к тегу <TD> заставляет текст внутри ячейки отображаться без переносов, одной сплошной строкой. Неправильное использование этого атрибута может привести к тому, что таблица будет слишком широкой и не поместится целиком на веб-страницу. Как следствие, появится горизонтальная полоса прокрутки. В любом случае, пользоваться подобной таблицей будет неудобно, из-за чего применение параметра nowrap осуждается в спецификации HTML 4.

ROWSPAN

Устанавливает число ячеек, которые должны быть объединены по вертикали. Этот параметр имеет смысл для таблиц, состоящих из нескольких строк. Например, как для таблицы, показанной ниже, где применяется вертикальное объединение ячеек.

Ячейка 1

Ячейка 2

Ячейка 3

В данной таблице содержатся две строки и две колонки, левые вертикальные ячейки объединены с помощью параметра rowspan.

VALIGN

Устанавливает вертикальное выравнивание содержимого ячейки. По умолчанию контент ячейки располагается по ее вертикали в центре. Возможные значения: top ? выравнивание по верхнему краю строки, middle ? выравнивание по середине, bottom ? выравнивание по нижнему краю, baseline ? выравнивание по базовой линии, при этом происходит привязка содержимого ячейки к одной линии.

WIDTH

Задает ширину ячейки. Суммарное значение ширины всех ячеек может превышать общую ширину таблицы только в том случае, если содержимое ячейки превышает указанную ширину.

Особенности таблиц

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

  • Одну таблицу допускается помещать внутрь ячейки другой таблицы. Это требуется для представления сложных данных или в том случае, когда одна таблица выступает в роли модульной сетки, а вторая, внутри нее, уже как обычная таблица.

  • Размеры таблицы изначально не установлены и вычисляются на основе содержимого ячеек. Например, общая ширина определяется автоматически исходя из суммарной ширины содержимого ячеек плюс ширина границ между ячейками, поля вокруг содержимого, устанавливаемые через параметр cellpadding и расстояние между ячейками, которые определяются значением cellspacing.

  • Если для таблицы задана ее ширина в процентах или пикселах, то содержимое таблицы подстраивается под указанные размеры. Так, браузер автоматически добавляет переносы строк в текст, чтобы он полностью поместился в ячейку, и при этом ширина таблицы осталась без изменений. Бывает, что ширину содержимого ячейки невозможно изменить, как это, например, происходит при добавлении рисунков в ячейку. В этом случае ширина таблицы увеличивается, несмотря на указанные размеры.

  • Рамка таблицы, в случае добавления параметра border к тегу <TABLE>, изначально отображается как трехмерная. Присоединение параметра bordercolor превращает рамку в однотонную, ликвидируя тем самым эффект трехмерности.

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

ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 13

1. Установка сервера MySQL

Для создания баз данных и работы с ними нам понадобится установить сервер MySQL и утилиты, которые поставляются вместе с сервером. Дистрибутив сервера можно взять с сайта http://www.mysql.com/. Далее описывается установка, настройка и работа с MySQL 5.

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

Затем сконфигурируйте сервер с помощь мастера wizard, выбрав вначале стандартный вариант конфигурации сервера.

Выберите установку сервера MySQL как сервиса Windows, тогда MySQL будет запускаться при старте системы автоматически. Выберите имя для сервиса, например, MySQL 5. Под этим именем вы в дальнейшем найдёте его в списке сервисов в окне Администрирование|Службы.

Укажите, что необходимо включить путь до каталога bin в переменную PATH. Переменная PATH содержит имена всех каталогов, в которых система ищет программу, запускаемую пользователем. Если окажется, что программа находится в каталоге, не указанном в переменной PATH, то Windows нк чсожкт кё найти и сообщит о невозможности запуска приложения.

В каталоге bin сервера MySQL содержатся те файлы, которые потребуется запустать при старте сервера, а также утилиты, которые позволят нам связываться с сервером напрямую из командной строки.

На следующем этапе задайте параль для суперпользователя root.

Примечание: Суперпользователь root – это владелец системы, он может выполнять любые действия по управлению сервером и администрированию баз данных.

Требования к качеству пароля здесь нежёсткие, можете выбрать любое словарное слова, записав его латиницей. Не разрешайте удалённый доступ к серверу для суперпользователя.

Примечание: Разрешение удалённого доступа к серверу существенно ослабит его безопасность и может быть разрешено, только если доступ осуществляется с шифрацией передаваемых данных.

Создайте учётную запись для анонимного пользователя.

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

Завершите установку и удостоверьтесь, что сервис MySQL запущен. Найдите среди установленных на вашем компьютере программ группу MySQL и запустите клиентскую программу доступа к серверу MySQL Command Line Client из командной строки.

Если установка завершилась благополучно, то сервер у вас уже запущен, клиентская утилита mysql установит соединение с сервером и предложит ввести пароль. Введите пароль суперпользователя. Таким образом, вы соединитесь с сервером MySQL под именем суперпользователя root, то есть будете иметь все возможные права для работы. Для завершения сеанса работы с сервером MySQL достаточно дать команду quit в окне клиентского приложения.

Но не торопитесь создавать базы с данными, записанными в какой-либо кодировке русского языка. Дело в том, что, начиная с 4.1 версии MySQL, задать кодировку можно не только для всего сервера, но и для отдельной базы, даже столбца. Причём в вашей базе данных столбцы могут иметь как различную кодировку, так и разные правила сравнения данных.

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

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

Итак, для настройки MySQL откройте каталог, в который был установлен сервер, и найдите файл my.ini. В этот конфигурационный файл и необходимо внести приведённые далее директивы. Найдите в файле my.ini раздел, касающийся самого сервера, он помечен символами [mysqld]. Строки, начинающиеся с символа решётки (#) являются комментариями. Найдите директиву default-character-set (использовать по умолчанию указанную кодировку), измените её и добавьте ещё три директивы так, чтобы этот фрагмент файла имел вид:

default-character-set=cp1251

character-set-server=cp1251

init-connect=”SET NAMES cp1251”

skip-character-set-client-handshake

Две последние строки принудительно устанавливают кодировку cp1251 для всех запросов. Эти директивы позволяют создавать таблицы в кодировке cp1251 и благополучно выполнять запросы, используя русскоязычные строки. Но хотелось бы предостеречь от создания столбцов, таблиц и баз с русскими именами. Иначе в самых неожиданных местах вас подстерегают ошибки и некорректная обработка данных.

И последнее. В версии PHP 5.2.4 при установке в Windows обнаружилась проблема, про которую русскоязычные гуру говорят, что причина её науке не известна. Проблема же состоит в том, что даже после установки всех необходимых для работы с MySQL расширений PHP они не подключаются до тех пор, пока не скопируешь библиотеку libmysql.dll в каталог windows/system32. Но к настоящему моменту в вашем распоряжении имеется две таких библиотеки – в каталоге, куда установлен PHP, и в каталоге, где находится MySQL. Так вот, копировать нужно ту, что находится в каталоге PHP.

2. CSS – свойства для оформления таблиц. Использование таблиц для верстки «за» и «против».

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

Создание таблиц

Для добавления таблицы на веб-страницу используется тег <TABLE>. Этот элемент служит контейнером для элементов, определяющих содержимое таблицы. Любая таблица состоит из строк и ячеек, которые задаются с помощью тегов <TR> и <TD> соответственно. Таблица должна содержать хотя бы одну ячейку (пример 11.1). Допускается вместо тега <TD> использовать тег <TH>. Текст в такой ячейке отображается браузером обычно жирным шрифтом и выравнивается по центру. В остальном, разницы между ячейками, созданными через теги <TD> и <TH>, нет.

Пример 11.1. Создание таблицы

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <table border="1" width="100%" cellpadding="5">  <tr>   <th>Ячейка 1</th>   <th>Ячейка 2</th>  </tr>  <tr>   <td>Ячейка 3</td>   <td>Ячейка 4</td>  </tr> </table> </body> </html>

Вид таблицы, полученной в данном примере, показан ниже.

Ячейка 1

Ячейка 2

Ячейка 3

Ячейка 4

Ячейки формируются по строкам, вначале указывается первая строка, затем вторая и т.д.

Параметры таблиц

Тот факт, что таблицы применяются достаточно часто и не только для отображения табличных данных обязан не только их гибкости и универсальности, но и обилию параметров тегов <TABLE>, <TR> и <TD>. Далее перечислены параметры тега <TABLE>.

ALIGN

Задает выравнивание таблицы по краю окна браузера. Допустимые значения: left ? выравнивание таблицы по левому краю, center ? по центру и right ? по правому краю.

BGCOLOR

Устанавливает цвет фона таблицы.

BORDER

Устанавливает толщину рамки в пикселах. По умолчанию рамка изображается трехмерной, но если используется параметр bordercolor тега <TABLE>, то вид рамки меняется. Когда в теге <TABLE> используется параметр border без аргументов (<table border>), то браузер отображает рамку толщиной один пиксел.

BORDERCOLOR

Устанавливает цвет рамки таблицы. Рамка обычно рисуется как трехмерная, добавление параметров bordercolor и border к тегу <TABLE> создают однотонную линию.

CELLPADDING

Определяет расстояние между границей ячейки и ее содержимым. Этот параметр добавляет пустое пространство к ячейке, увеличивая тем самым ее размеры. Без параметра cellpadding текст в таблице ?налипает? на рамку, снижая тем самым его восприятие. Добавление же cellpadding позволяет улучшить читабельность текста. При отсутствии границ особого значения этот параметр не имеет, но может помочь, когда требуется установить пустой промежуток между ячейками.

CELLSPACING

Задает расстояние между внешними границами ячеек. Если установлен параметр border, толщина границы принимается в расчет и входит в общее значение.

HEIGHT

Устанавливает высоту таблицы. В спецификации HTML 4 этого параметра нет, однако браузеры в большинстве случаев понимают его, если он установлен у тега <TABLE>. Если высота таблицы не указана, то берется суммарное значение параметра height у тега <TD>, в противном случае высота вычисляется на основе содержимого таблицы.

WIDTH

Задает ширину таблицы. Если общая ширина содержимого превышает указанную ширину таблицы, то браузер будет пытаться ?втиснуться? в заданные размеры за счет форматирования текста. В случае, когда это невозможно, например, в таблице находятся изображения, параметр width будет проигнорирован, и новая ширина таблицы будет вычислена на основе ее содержимого. Как и в случае с высотой, если ширина явно не указана, то она будет вычисляться на основе содержимого таблицы.

Параметры ячеек

Каждая ячейка таблицы, задаваемая через тег <TD>, в свою очередь тоже имеет свои параметры, часть из которых совпадает с параметрами тега <TABLE>.

ALIGN

Задает выравнивание содержимого ячейки по горизонтали. Возможные значения: left ? выравнивание по левому краю, center ? по центру и right ? по правому краю.

BGCOLOR

Устанавливает цвет фона ячейки. Используя этот параметр совместно с атрибутом bgcolor тега <TABLE> можно получить разнообразные эффекты в таблице.

BORDERCOLOR

Устанавливает цвет рамки вокруг ячейки. Рамка показывается, когда установлен параметр border с ненулевым значением у тега <TABLE>.

COLSPAN

Устанавливает число ячеек, которые должны быть объединены по горизонтали. Этот параметр имеет смысл для таблиц, состоящих из нескольких строк. Например, как для таблицы, показанной ниже, где используется горизонтальное объединение ячеек.

Ячейка 1

Ячейка 2

Ячейка 3

В данной таблице содержатся две строки и две колонки, причем верхние горизонтальные ячейки объединены с помощью параметра colspan.

HEIGHT

Браузер сам устанавливает высоту таблицы и ее ячеек исходя из их содержимого. Однако при использовании параметра height высота ячеек будет изменена. Здесь возможны два варианта. Если значение height меньше, чем содержимое ячейки, то этот параметр будет проигнорирован. В случае, когда установлена высота ячейки, превышающая ее содержимое, добавляется пустое пространство по вертикали.

NOWRAP

Добавление параметра nowrap к тегу <TD> заставляет текст внутри ячейки отображаться без переносов, одной сплошной строкой. Неправильное использование этого атрибута может привести к тому, что таблица будет слишком широкой и не поместится целиком на веб-страницу. Как следствие, появится горизонтальная полоса прокрутки. В любом случае, пользоваться подобной таблицей будет неудобно, из-за чего применение параметра nowrap осуждается в спецификации HTML 4.

ROWSPAN

Устанавливает число ячеек, которые должны быть объединены по вертикали. Этот параметр имеет смысл для таблиц, состоящих из нескольких строк. Например, как для таблицы, показанной ниже, где применяется вертикальное объединение ячеек.

Ячейка 1

Ячейка 2

Ячейка 3

В данной таблице содержатся две строки и две колонки, левые вертикальные ячейки объединены с помощью параметра rowspan.

VALIGN

Устанавливает вертикальное выравнивание содержимого ячейки. По умолчанию контент ячейки располагается по ее вертикали в центре. Возможные значения: top ? выравнивание по верхнему краю строки, middle ? выравнивание по середине, bottom ? выравнивание по нижнему краю, baseline ? выравнивание по базовой линии, при этом происходит привязка содержимого ячейки к одной линии.

WIDTH

Задает ширину ячейки. Суммарное значение ширины всех ячеек может превышать общую ширину таблицы только в том случае, если содержимое ячейки превышает указанную ширину.

Особенности таблиц

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

  • Одну таблицу допускается помещать внутрь ячейки другой таблицы. Это требуется для представления сложных данных или в том случае, когда одна таблица выступает в роли модульной сетки, а вторая, внутри нее, уже как обычная таблица.

  • Размеры таблицы изначально не установлены и вычисляются на основе содержимого ячеек. Например, общая ширина определяется автоматически исходя из суммарной ширины содержимого ячеек плюс ширина границ между ячейками, поля вокруг содержимого, устанавливаемые через параметр cellpadding и расстояние между ячейками, которые определяются значением cellspacing.

  • Если для таблицы задана ее ширина в процентах или пикселах, то содержимое таблицы подстраивается под указанные размеры. Так, браузер автоматически добавляет переносы строк в текст, чтобы он полностью поместился в ячейку, и при этом ширина таблицы осталась без изменений. Бывает, что ширину содержимого ячейки невозможно изменить, как это, например, происходит при добавлении рисунков в ячейку. В этом случае ширина таблицы увеличивается, несмотря на указанные размеры.

  • Рамка таблицы, в случае добавления параметра border к тегу <TABLE>, изначально отображается как трехмерная. Присоединение параметра bordercolor превращает рамку в однотонную, ликвидируя тем самым эффект трехмерности.

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

ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 14

  1. Построение сайта электронной коммерции.

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

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

Все большую популярность приобретают интернет-аукционы,на которых выставляется практически все – от бытовой техники до предметов искусства и коллекционирования.

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

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

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

Задача.

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

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

Структура сайта.

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

Файлы приложения электронной комменции.

Домашняя страниыа сайта генерируется через сценарий index.php. После загрузки сценария на странице вывадится информация о предложениях по разным странам и форма для выбора страны. После выбора страны появляется форма с перечнем городов в выбранной стране.

После выбора города посетитель попадает на страницу select_tour.php, на которой выводится список предложений по выбранному городу. С этой же страницы можно попасть на страницы с описаниями стран, городов и отелей.

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

Если посетитель сайта решит заказать тур, то он переходит на страницу order.php, где может сообщить данные о себе и указать, какой тур выбирает.

Обхявления классов содержатся в отдельных сценариях, подключаемых с помощью функции _autoload().

Интерфейс администратора имеет свою титульную страницу – admin.php, на ней выводится список клиентов и стоит ссылка на страницу редактирования данных базы.

2. Блочная модель CSS как основополагающий инструмент верстки web-страниц

Блочная модель CSS характеризуется прямоугольниками, которые генерируются для всех элементов HTML.

Элементы блочного уровня обычно отображаются в виде блоков с разрывом строки до и после элемента. В качестве примеров элементов блочного уровня можно привести абзацы, загоовки, элементы div и span и блочные цитаты.

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

Все блочные и внутритекстовые элементы являются блоками, использующими блочную модель. Сили элементов обоих типов можно определять с помощью таких свойств блочной модели, как margin, background-color, background-image, padding и border.

Некоторые свойства блочной модели, например, height и width, не применяются к кнутритекстовым элементам. Кроме того, применение свойств margin и padding к внутритекстовым элементам влияет на содержимое, расположенное слева и справа от элемента, но не влияет на содержимое сверху и снизу от элемента.

113