HTTP-Cookie

HTTP
Persistence · Сжатие · SSL
Заголовки
Cookie · ETag · Referer · User-Agent
Коды состояния
200 OK
301 Moved permanently
302 Found
403 Forbidden
404 Not Found

«Кука» (от англ. 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.

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

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

[править] История

По одной из версий термин «HTTP куки» происходит от «волшебных кук»[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, содержащем куки с атрибутами
Образец 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]

  1. В конце сессии (например, когда браузер закрывается), если куки не являются постоянными.
  2. Дата истечения была указана и срок хранения вышел.
  3. Дата истечения срока хранения изменена сервером или скриптом на уже прошедшую дату.
  4. Браузер удалил куки по запросу пользователя.

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

[править] Авторизация

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

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

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

[править] Настройка браузера

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

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

  1. Полное отключение кук.
  2. Удаление кук при закрытии браузера.
  3. Различение сторонних кук с третьей стороны и соответствующее обращение с ними (например, ограничение или запрет для них).
  4. Обработка кук на основе «белого» и/или «чёрного» списков, обновляемых пользователем или изготовителем браузера. Куки из «чёрного списка» блокируются.
  5. Запрет кук от определённых доменов (разновидность «чёрного списка»).
  6. Установка разумных сроков истечения кук.

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

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

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

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

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

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

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

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

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

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

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

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

[править] Недостатки кук

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

[править] Неточная идентификация

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

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

[править] Взлом кук

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

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

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

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

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

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

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

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

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

[править] Отравление кук

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

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

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

[править] Межсайтовые куки

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

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

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

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

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

[править] Истечение кук

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

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

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

[править] IP-адрес

Основная статья: IP-адрес

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

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

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

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

[править] URL (строка запроса)

Основная статья: 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-скриптом или другой страницей, запрашивающей этот скрипт.

[править] Примечания

  1. Проблемы с работой интернет-магазина. OZON.ruПроверено 12 августа 2008 г.
  2. 1 2 FAQ по кукам(англ.). Microsoft. Проверено 12 августа 2008 г.
  3. Справочный центр, веб-поиск. GoogleПроверено 12 августа 2008 г.
  4. Киви Берд Целевая реклама - угроза приватности?. КомпьютерраПроверено 12 августа 2008 г.
  5. 1 2 Netscape Предварительная спецификация кук(англ.) (txt) Проверено 7 августа 2008 г.
  6. 1 2 3 RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP (IETF)
  7. Андрей Аликберов (1998) Что такое cookies и как с ними работать Проверено 2 августа 2008 г.
  8. John Schwartz (4 сентября 2001) Giving Web a Memory Cost Its Users Privacy(англ.). New York TimesПроверено 7 августа 2008 г.
  9. Netscape Communications Представляют Новый Сетевой Бесплатной Интернет-Навигатор(англ.). CNET Networks (13 октября 1994). Проверено 7 августа 2008 г.
  10. Марк Андреассен (13 октября 1994) Мир, вот он!(англ.) — Сообщение на UsenetПроверено 7 августа 2008 г.
  11. Сэнди Хардмайер (25 августа 2005) История Internet Explorer(англ.). Microsoft. Проверено 7 августа 2008 г.
  12. Роджер Кларк (1 июня 1998) Куки(англ.) Проверено 7 августа 2008 г.
  13. Вопреки уверениям, куки - добро!(англ.). ARA Content (2005). Проверено 7 августа 2008 г.
  14. I-034: Интернет-куки(англ.). Министерство энергетики США (12 марта 1998). Проверено 7 августа 2008 г.
  15. Брайан Куинтон (18 мая 2005) Исследование: Пользователи не понимают, что такое куки, и не умеют их удалять(англ.) Проверено 7 августа 2008 г.
  16. Адам Пененберг (7 ноября 2005) Куки-монстры(англ.) Проверено 7 августа 2008 г.
  17. Росс Шэннон (26 февраля 2007) Куки и JavaScript(англ.) Проверено 7 августа 2008 г.
  18. 1 2 3 Дэвид Уолен (6 августа 2002) Неофициальный FAQ по кукам(англ.) Проверено 8 августа 2008 г.
  19. О куках(англ.). AOL (15 марта 2004). Проверено 13 августа 2008 г.
  20. Куки и авторизация(англ.). MSDNПроверено 13 августа 2008 г.
  21. Поддержка веб-браузеров(англ.). Университет Буффало (15 ноября 2004). Проверено 13 августа 2008 г.
  22. ЦРУ поймано на краже кук(англ.). CBS News (20 марта 2002). Проверено 8 августа 2008 г.
  23. Агентство удаляет незаконные файлы слежения(англ.). Associated Press (29 декабря 2005). Проверено 8 августа 2008 г.
  24. Директива о неприкосновенности частной жизни и электронных коммуникаций(англ.) Проверено 8 августа 2008 г.
  25. Настройки кук в Opera 9(англ.) Проверено 8 августа 2008 г.
  26. Wi-fi взлом веб-почты(англ.). BBC News (3 августа 2007). Проверено 8 августа 2008 г.
  27. На что похожа XSS кража кук?(англ.). Cgisecurity.com (май 2002). Проверено 8 августа 2008 г.
  28. Снижение опасности межсайтового скриптинга с помощью HTTP-only кук(англ.). Microsoft. Проверено 8 августа 2008 г.
  29. Майкл Ховард; Кит Браун (2000) 10 советов по защите кода(англ.). Microsoft. Проверено 8 августа 2008 г.
  30. Элинор Милз (16 июля 2007) Google снижает срок хранения кук для повышения безопасности(англ.). CNET NetworksПроверено 8 августа 2008 г.
  31. Введение в Хранение(англ.).