"Человек - самое уязвимое место в системе безопасности.."

Что такое cookies и как с ними работать

Содержание:

Общее

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

Что можно делать с помощью cookie

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

Синтаксис и формат cookie

Полное описание поля Set-Cookie HTTP заголовка:

  • Set-Cookie: NAVE=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure

Минимальное описание поля Set-Cookie HTTP заголовка:

  • Set-Cookie: NAME=VALUE;

NAME=VALUE — строчка символов, исключая знаки препринания и переноса и пробелы. Name — имя куки, Value — значение.

expires=DATE — домен, для которого значение куки действительно. К примеру: ‘domain=infoprotect.net’. Если атрибут не указан, то используется доменное имя сервера по умолчанию, на котором было реализовано значение куки.

path=PATH — атрибут указывает подмножество документов, для которых будет действителен данный куки. К примеру: ‘path=/media’, указывает на то, что куки работает в директории media. Чтобы куки отсылался при каждом запросе к серверу, нужно поставить корневой каталог сервера — ‘path=/’.

Если атрибут не указан, то куки действителен для тех документов, на которых он был создан.

secure — маркер указывающий на пересылку куки только через HTTPS.

Синтаксис HTTP заголовка для поля Cookie

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

  • Cookie: NAME1=STRING1; NAME2=STRING2;..

Браузер может обновлять атрибуты куки по запросу сервера. Браузер (клиент) имеет ограничения для куки:

  • можно хранить до 300 значений куки
  • каждый cookie не должен превышать 4 Кбайт
  • один сервер/домен не записывает больше 20 значение куки

Если лимит превышается, то удаляются записи первые по времени записи. Поле Set-cookie HTTP заголовка никогда не кэшируется.

Методы задания значение cookie

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

  • Мета-теги HTML
  • JavaScript
  • CGI-скрипты

Главное не забывать об ограничениях по объему и количеству.

Задания значение Cookie через HTMLcookie html

Для этого нужно разместить тег META в контейнере <head> </head>

  • <META HTTP-EQUIV=»Set-Cookie» CONTENT=»NAME=value; EXPIRES=date; DOMAIN=domain_name; PATH=path; SECURE»>

С помощью php работа с куки одно удовольствие.

Задания cookie с помощью JS

Главным недостатком такого метода является то, что не все браузеры могут разрешать работу js.

Функция установки значения куки

	/ name - имя cookie
// value - значение cookie
// [expires] - дата окончания действия cookie (по умолчанию - до конца сессии)
// [path] - путь, для которого cookie действительно (по умолчанию - документ, в котором значение было установлено)
// [domain] - домен, для которого cookie действительно (по умолчанию - домен, в котором значение было установлено)
// [secure] - логическое значение, показывающее требуется ли защищенная передача значения cookie

function setCookie(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + expires.toGMTString() : "") +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "")
        if (!caution || (name + "=" + escape(value)).length <= 4000)
                document.cookie = curCookie
        else
                if (confirm("Cookie превышает 4KB и будет вырезан !"))
                        document.cookie = curCookie
}

Функция чтения значения куки

	// name - имя считываемого cookie

function getCookie(name) {
        var prefix = name + "="
        var cookieStartIndex = document.cookie.indexOf(prefix)
        if (cookieStartIndex == -1)
                return null
        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
        if (cookieEndIndex == -1)
                cookieEndIndex = document.cookie.length
        return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

Функция удаления значений куки

// name - имя cookie
// [path] - путь, для которого cookie действительно
// [domain] - домен, для которого cookie действительно
function deleteCookie(name, path, domain) {
        if (getCookie(name)) {
                document.cookie = name + "=" + 
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                "; expires=Thu, 01-Jan-70 00:00:01 GMT"
        }

Задания cookie с помощью CGI

Самый гибкий и сильный метод управления и работы с куки.

Задание значение cookie на языке Perl:

  • print «Content-type: text/html\n»;
  • print «Set-Cookie: username=aaa13; expires=Friday, 31-Dec-99 23:59:59 GMT; path=/; domain=www.citforum.ru;\n\n»;

Итог

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