Автор: [X]-tenDead MoPo[3]
E-mail: gazzzeta@inbox.ru
Home Page: http://gazzzeta.da.ru
Зачем Cookie нужен?
Дело в том, что HTTP-протокол -
одноразовый, если так можно выразиться.
Т.е. каждый раз заходя на страничку,
пользователь начинает сначала, что бы он
не вводил, и какие изменения бы не делал.
Cookie помогает создать иллюзию, что
пользователя помнят на сайте.
Пользователю не нужно вводить сотню раз
одну и ту же информацию от странички к
страничке, и даже от сессии к сессии, она
хранится у него на диске. К удобству
можно отнести еще и то, что эту
информацию пользователь всегда сможет
сменить у себя на диске "на лету". В
Cookie также могут храниться другие
разнообразные данные. Например,
количество посещений какой-то страницы,
время посещений. С помощью cookie не
составляет труда сделать маленький
органайзер или корзину в виртуальном
магазине.
Cookie многие не любят из-за ее
небезопасности. Многие аналитики
говорят, что это не проблема, и ничего
плохого с помощью данной технологии
сделать нельзя. Я с этим глубоко не
согласен, если кто-то может читать
информацию из файла(ов) cookie, то это уже
небезопасно. Приведу чисто
теоретические примеры, которые, при
желании, не трудно воплотить в
реальность.
1. Допустим, пользователь
зашел на почтовый сайт, заполнил форму с
login'ом и паролем, которые записались в
cookie, пускай даже через Secure Socket Level.
Взломщик написал письмо пользователю в
формате HTML с параметрами чтения cookie с
паролями. Прочитав cookie, HTML-файл или
запрашивает у пользователя разрешение
отослать информацию взломщику, где
пользователя можно обмануть ложной
надписью а ля "Ошибки в сценариях
Javascript!". Даже довольно опытный
пользователь не задумываясь нажмет OK,
после чего login и пароль отошлется
взломщику. Или взломщик может добавить 0-ой
фрейм, где будет временно содержаться
информация из cookie, которая при ответе на
письмо, будет вставляться в конец письма.
Все это нетрудно сделать с помощью FORM и
Javascript.
2. Пример с виртуальным
магазином. Допустим, мы имеем
гипотетический магазин shop.provider.com.
Совершая покупки в данном магазине,
пользователь хранит информацию в cookie.
Параллельно или до захода в магазин,
пользователь зашел на гипотетическую
страницу взломщика hacker.provider.com, где
изменялись настройки cookie виртуального
магазина. Взломщик может изменить
количество покупок, имя, адрес, и все то,
что хранится в данном cookie. Я думаю, вам бы
не понравилось, если к вашим покупкам
прибавили пару мониторов или отвезли
ваши покупки не тому пользователю.
Сделать это довольно просто, если иметь
страничку в домене магазина второго или
третьего уровня.
Несколько других, уже
ПРАКТИЧЕСКИХ примеров, я описывал в
статье "Взлом через Cookie" (http://www.nvkz.kuzbass.net/gazzzeta/htm/136.htm).
Итак, для пользователя
технология cookie представляет собой
несколько файлов в папке %WINDOWS%\Cookies (по
умолчанию в Internet Explorer), либо всего один
файл cookie.txt (если это Netscape Navigator и другие
броузеры). Сайты периодически добавляют
информацию в cookie и ее же забирают.
Естественно, в спецификациях Cookie
предусмотрены некоторые элементы
защиты.
-
Всего Cookies может быть не
больше 300.
-
Каждый Cookie не может быть
больше 4kb.
-
С одного домена второго
уровня (плюс подуровни) не может быть
получено больше 20 Cookies.
-
Информация из Cookie одного
домена второго уровня (плюс подуровни)
не может быть прочитана другими
доменами.
-
Если документ кэшируется, то
информация о cookie не кэшируется.
-
Информация в\из Cookie может
передавать с помощью протокола SSL.
Если лимит
исчерпывается, первые записи удаляются.
Если Cookie становится больше 4kb, первые
байты вырезаются.
Формат Cookie.
Полную спецификацию на
английском можно найти на http://www.netscape.com/newsref/std/cookie_spec.html.
В моей статье только сокращенное
описание.
Информация в Cookie задается
принципом ИМЯ=ЗНАЧЕНИЕ. В одном
документе может содержаться несколько
Cookies (не больше 20). Минимальное описание
поля Cookie выглядит так:
Set-Cookie: NAME=VALUE;
Максимальное выглядит так:
Set-Cookie: NAME=VALUE; expires=DATE; path=PATH;
domain=DOMAIN_NAME; secure
-
NAME=VALUE - NAME - Имя Cookie, VALUE -
Значение. Можно менять как NAME, так и VALUE.
Используются любые символы, кроме
символа переноса строки, двоеточия,
запятой и пробела.
Пример: Имя=Вася
-
expires=DATE - Дата окончания
действия Cookie. Менять только DATE. Вид
такой: "expires=День, Число-Ден-ГГГГ ЧЧ:ММ:СС
GMT". Если expires не обозначен, Cookie
хранится до закрытия окна броузера.
Пример: expires=Fri, 14-Sep-2005 13:13:13
GMT
-
domain=DOMAIN_NAME - домен на
котором действителен Cookie. Вид такой:
"domain=domain.com". Cookie будет
действителен как для www.domain.com, так и
для myname.domain.com. В зоне RU и других
локальных зонах не работает.
Используется только для COM, EDU, NET, ORG, GOV,
MIL и INT. Если domain не обозначен,
используется доменное имя сервера с
Cookie.
Пример1: domain=mamapapa.com
Пример2: domain=gazzzeta.da.ru
-
path=PATH - Указывает имена
докментов, для которых действительно
значение Cookie. Вид такой: "path=/word".
Cookie будет отсылаться в директориях /word,
/word2000 и файлов в текущей директории с
именами word.htm, wordchampion.html. Для
применения Cookie ко всему серверу
указывается корневой каталог сервера
/. Если path не указан, Cookie
распространяется только на текущую
директорию.
Пример1: path=/gazzzeta
Пример2: path=/
-
secure - Если указан, при
передаче Cookie используется HTTPS (HTTP с SSL -
Secure Socket Level). Если secure не указан, Cookie
передается HTTP.
Если Cookie использует
одинаковое значение NAME, domain и path - старое
значение заменяется новым.
Вставка Cookie в HTML.
Вставить Cookie можно
несколькими способами. Самые простой -
это через META-тег. Альтернативным
способом является Javascript и всевозможные
другие технологии (CGI, PHP, SSI и т.д.).
Рассматривать CGI, PHP, SSI и прочие мы не
будем, т.к. это требует от вашего домена,
где располагается страница, возможности
использования этих технологий, что
бывает не всегда.
Использование Cookie через META-тег.
Между тегов <HEAD> и </HEAD>
Cookie вписывается так:
<META HTTP-EQUIV="Set-Cookie" CONTENT="NAME=VALUE;
expires=DATE; domain=DOMAIN_NAME; path=PATH; secure">
Можно использовать несколь META-тегов с
Cookie в одном документе.
Пример: <META HTTP-EQUIV="Set-Cookie"
CONTENT="Имя=Вася; expires=Fri, 14-Sep-2005 13:13:13 GMT; path=/;
domain=provider.com; secure">
Использование Cookie через
Javascript.
Использование Cookie с помощью
Javascript является самым популярным
способом, т.к. это довольно просто для
разработчика, не требует от сервера
определенного программного обеспечения
и может использовать динамичные данные,
генерируемые внутренним Javasript-скриптом,
либо вводимые пользователем.
Вот примера скрипта Javascript,
используещего Cookie. Скрипт не мой, но он
точно описывает те возможности, о
которых мы говорим. К сожалению, автора
скрипта я не знаю поэтому указать не
могу.
<script language="JavaScript">
<!--
var username = GetCookie('username');
if (username == null) {
username = prompt(' Пожалуйста, введите Ваше им\я\n
(в противном случае нажмите cancel)',"");
if (username == null) {
alert('Ну хорошо, тогда я буду звать Вас
ВебСёрфером');
username = 'ВебСёрфер';
} else {
pathname = location.pathname;
myDomain = pathname.substring(0,pathname.lastIndexOf('/')) +'/';
// Установка параметра expire на год вперед.
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (365 * 24 * 3600 * 1000));
SetCookie('username',username,largeExpDate,myDomain);
}
}
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0)
break;
}
return null;
}
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" +
expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure"; : "");
}
document.write('<p align=center>Здравствуйте, ' +
username + '</p>');
// --></SCRIPT>
Останавливаться на данном
скрипте смысла нет, статья о Cookie, а не о
Javascript.
Как видите, технология Cookie
предоставляет огромные возможности для
разработчиков сайтов. Cookie
поддерживается всеми более или менее
известными броузерами, такими как Netscape
Navigator, Microsoft Internet Explorer, Mosaic, Opera и другими,
начиная с самых первых версий.
|