Технология cookies давно находится в поле зрения специалистов по защите информации. Одной из основных причин является то, что много антишпионские программы содержат средства поиска «вредоносных» cookies и внушительные базы сигнатур для реализации такого поиска. Детектирование cookies в качестве одной из разновидностей шпионского ПО в свою очередь вызывает множество вопросов у пользователей – насколько это опасно и следует ли применять особые меры защиты. Задачей данной статьи является рассмотрение технологии Cookie, создаваемых ей потенциальных угроз, методик анализа и противодействия.
Назначение cookies
Итак, стоит начать с ответа на вопрос "что такое cookies". Cookies - это текстовая информация небольшого объема, которая сохраняется на компьютере пользователя по запросу WEB сервера и предается ему при повторных посещениях. Основным назначением cookies является:
1. Организация сессий в ходе работы пользователя с On-Line магазинами, форумами и иными интерактивными системами с Web интерфейсом, например с системами документооборота или почтовыми сервисами с web интерфейсом. В этом случае в cookie хранятся некоторые параметры сессии, например ее уникальный идентификатор;
2. Хранение различных параметров пользователя. Часто в cookie хранятся не сами данные, а некий идентификатор, позволяющий программному обеспечению web сервера опознать пользователя;
3. Идентификация пользователя в рейтинговых системах, счетчиках, системах баннерного показа, on-line голосованиях. Часто применяется как элемент защиты от так называемой «накрутки» счетчиков посещения
Существуют три способа создания cookie:
1. При помощи поля в заголовке HTTP ответа. В этом случае сервер передает в HTTP ответе одно или несколько полей Set-Cookie: <определение cookies> . Пример заголовка HTTP ответа сервера:
HTTP/1.0 200 OK
Date: Thu, 22 Dec 2005 06:41:30 GMT
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Content-type: image/gif
Set-Cookie: ruid=AjkABppKqkPzAAAAAZEAnFyrv; path=/; domain=.rambler.ru; expires=Sun, 20-Dec-15 06:41:30 GMT
2. При помощи META тега в заголовке HTML страницы. Тег имеет вид <META HTTP-EQUIV="Set-Cookie" CONTENT=" определение cookies", причем в одной странице таких тегов может быть несколько. Данный тег эквивалентен полю Set-Cookie в заголовке HTTP ответа;
3. При помощи скриптов HTML страницы. В JavaScript, к примеру, для доступа к cookie предусмотрено свойство document.cookie. Рассмотрим простейший скрипт, который выводит на странице текущее значение document.cookie, а затем создает cookie с именем «test-cookie-1»
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
document.write("Cookie text = '" + document.cookie+"'");
document.cookie = "data=test-cookie-1-data; expires=Thursday, 14-Feb-2007 18:49:21 GMT";
</script>
</head>
<body>
</body>
</html>
Первый запуск примера должен отобразить пустую строку, второй и последующие – строку «data=test-cookie-1-data». Файл с данным примером прилагается к статье, имя файла - cookie-1.htm. Пример еще пригодится для тестирования анализатора cookies, речь о котором пойдет далее.
При создании cookie может быть указано время ее хранения при помощи параметра expires. В данном параметре указывается дата и время, до которого браузеру рекомендуется хранить cookie. Важно отметить, что именно рекомендуется – браузер не обязан хранить cookie с течение заданного времени. Если в момент создания cookie выяснится, что в параметре expires задана дата меньше текущей, то cookie с таким именем будет удален. Кроме того, существуют так называемые сеансовые cookie – у них не задано время хранения и они существуют только в течение сеанса работы. Сеансовые cookie часто применяются как средство поддержания сессии пользователя.
Передача cookie web-серверу производится в заголовке HTTP запроса, в поле Cookie:, вот пример типового HTTP запроса:
GET http://top100-images.rambler.ru/top100/ … black2.gif HTTP/1.0
Accept: */*
Referer: http://virusinfo.info
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: top100-images.rambler.ru
Pragma: no-cache
Cookie: ruid=yQAAAEBPWkIOagAAAawJAAA=
Подробную спецификацию cookie на английском языке можно найти по адресу http://wp.netscape.com/newsref/std/cookie_spec.html
Хранение cookies
Методика хранения cookie зависит от браузера. Internet Explorer сохраняет данные cookies в виде отдельных текстовых файлов в папке Cookies, расположенной в профиле пользователя. Единственным средством защиты данной папки является наличие у нее атрибута «Системный», что делает ее невидимой для проводника. Сами файлы имеют расширение txt и могут быть просмотрены при помощи обычного блокнота.
Браузер Mozilla Firefox хранит cookie в профиле пользователя, в файле Application Data\Mozilla\Firefox\Profiles\<имя профиля>\cookies.txt. Этот файл имеет весьма простую структуру – комментарии начинаются с символа #, данные cookie идут по одной на каждую строку, разделителем полей является знак табуляции.
Примеры web программирования с применением cookie
Для иллюстрации базовых приемов работы с cookie к статье приложено четыре простых примера CGI программ на языке Delphi (в виде исходных текстов и откомпилированных программ). Откомпилированные программы необходимо разместить в каталоге WEB сервера, для которого разрешено выполнение CGI программ. В случае с Microsoft IIS для изучения примеров рекомендуется создать отдельную папку, в настройках для нее разрешить запуск сценариев и исполняемых файлов.
Пример номер 1 (cookies1.exe) является примером простейшего CGI приложения, создающего и считывающего cookie. Второй пример несколько сложнее и демонстрирует возможность создания, получения и удаления cookie под управлением CGI программы. Пример номер три демонстрирует работу с сеансовыми cookie, имитируя механизм простейшей идентификации пользователя и поддержания сессии. Наконец пример 4 демонстрирует создание счетчика посещений с простейшей защитой он «накрутки» при помощи cookie.
Примеры подробно комментированы и могут быть откомпилированы на любой версии Delphi начиная с 5.0.