WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
HTTP
Постоянное соединение · HTTP pipelining · Сжатие[en] · HTTPS · HTTP/2
Методы
OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT · PATCH
Заголовки
Cookie · ETag · Referer
HTTP location
Do Not Track[en]
X-Forwarded-For[en]
Коды состояния
1xx: Informational
2xx: Success
3xx: Redirection
4xx: Client Error (404 Not Found)
5xx: Server Error

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

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

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

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

Назначение

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

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

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

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

Понятие

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

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

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

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

На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, 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] В отличие от других типов куки, сессионные куки не имеют истечения срока действия, и поэтому браузеры понимают их как сессионные.

Постоянные куки

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

Защищенные куки

Защищенные куки могут быть переданы только через шифрованное соединение (то есть HTTPS). Они не могут передаваться по незащищенным соединениям. Чтобы защитить куки, необходимо добавить флаг Secure в файл куки.

HttpOnly-куки

К файлу HttpOnly-куки нельзя обращаться с помощью API на стороне клиента, таких как JavaScript. Это ограничение устраняет угрозу кражи куки с помощью кросс-сайтового скриптинга (XSS). Тем не менее, куки остается уязвимым для кросс-сайтовой трассировки (XST) и кросс-сайтовых поддельных запросов (XSRF).

Этот тип куки содержит флаг HttpOnly.

Работа куки

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

Запрашивая страницу, браузер отправляет веб-серверу короткий текст с 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 на новую строку.

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

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

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

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

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

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

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

Дата истечения указывает браузеру, когда удалить куки. Если срок истечения не указан, куки удаляется по окончании пользовательского сеанса, то есть с закрытием браузера. Если же указана дата истечения срока хранения, куки становится постоянной до указанной даты. Дата истечения указывается в формате «Нед, ДД Мес ГГГГ ЧЧ:ММ:СС 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[15].

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

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

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

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

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

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

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

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

Многие браузеры (в частности Opera, FireFox), путём редактирования свойств куки, могут управлять поведением веб-сайтов. Изменив срок истечения непостоянных (сессионных) куки можно, например, получить формально-неограниченную сессию после авторизации на каком-либо сайте. Возможность редактирования куки стандартными средствами отсутствует в Internet Explorer. Но, воспользовавшись иными механизмами, например, JavaScript, пользователь может изменить куки-файл. Более того, существует возможность заменить сессионные куки постоянными (с указанием срока годности).

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

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

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

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

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

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

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

Существует заблуждение, что куки являются программами и могут самостоятельно отслеживать действия пользователей, хотя это только фрагменты данных, хранящиеся на компьютере браузером[19]. Согласно опросу, проведённому американской компанией Insight Express в 2005 году, 25 % респондентов уверены в этом[20].

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

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

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

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

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

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

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

В 2009 году Директива 2009/136/ЕС[25] внесла изменения в Директиву 2002/58/ЕС, которые вступили в силу мае 2011 г. Изменения ужесточили требования к порядку сбора информации о посетителях сайтов. Согласно новым правилам владельцы сайтов должны получать предварительное согласие посетителей на сбор информации (в том числе куки) и сообщать о действующих на сайте инструментах сбора информации.[26]

В мае 2018 года в Евросоюзе вступил в силу Общий регламент по защите данных, заменивший действующую Директиву 2002/58/ЕС, относящийся ко всем сайтам, посещаемым из Евросоюза, и приравнивающий большую часть куки к другим персональным данным. В изначальном проекте предполагалось, что настройки браузера могут признаваться достаточным выражением согласия пользователя на установку куки[27], а согласно окончательной версии достаточно уведомления об установке куки[28].

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

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

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

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

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

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

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

Кража куки

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

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

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

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

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

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

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

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

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

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

Подмена куки

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

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

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

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

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

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

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

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

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

Срок действия куки

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

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

Обычные куки имеют хоть и очень большой, но ограниченный «срок жизни», после чего удаляются. Кроме того, любые куки в браузере можно удалить с помощью специальной опции. В результате браузер перестает идентифицировать посетителя при повторном заходе на сайт. Польский специалист Сэмми Камкар решил систематизировать наиболее «живучие» куки, в результате чего появилась JavaScript-библиотека под названием Everycookie. Такие чудо-куки теоретически позволяют идентифицировать любого посетителя сайта при его возвращении на страницу. Сайт, использующий библиотеки Everycookie, без труда обходит все меры по сохранению анонимности (хотя некоторые антивирусы могут определять такие сайты как опасные). Для защиты от Everycookie рекомендуется использование режима Private Browsing, либо специальных программ, таких, как Mil Shield.

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

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

IP-адрес

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Примечания

  1. 1 2 3 FAQ по куки (англ.). Microsoft. Проверено 12 августа 2008. Архивировано 26 августа 2011 года.
  2. Проблемы с работой интернет-магазина. OZON.ru. Проверено 12 августа 2008.
  3. Справочный центр, веб-поиск. Google. Проверено 12 августа 2008. Архивировано 26 августа 2011 года.
  4. Киви Берд. Целевая реклама - угроза приватности? (недоступная ссылка). Компьютерра. Проверено 12 августа 2008. Архивировано 5 апреля 2013 года.
  5. 1 2 Netscape. Предварительная спецификация кук (англ.) (txt). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  6. 1 2 3 RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP (IETF)
  7. Андрей Аликберов. Что такое cookies и как с ними работать (1998). Проверено 2 августа 2008. Архивировано 26 августа 2011 года.
  8. John Schwartz. Giving Web a Memory Cost Its Users Privacy (англ.). New York Times (4 сентября 2001). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  9. Netscape Communications Представляют Новый Сетевой Бесплатной Интернет-Навигатор (англ.). CNET Networks (13 октября 1994). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  10. Марк Андреассен. Мир, вот он! (англ.) (13 октября 1994). — Сообщение на Usenet. Проверено 7 августа 2008.
  11. Сэнди Хардмайер. История Internet Explorer (англ.). Microsoft (25 августа 2005). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  12. Роджер Кларк. Куки (англ.) (1 июня 1998). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  13. "Maintaining session state with cookies". Microsoft Developer Network (22 October 2012).
  14. Росс Шэннон. Куки и JavaScript (англ.) (26 февраля 2007). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  15. 1 2 3 Дэвид Уолен. Неофициальный FAQ по куки (англ.) (6 августа 2002). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  16. О куки (англ.) (недоступная ссылка). AOL (15 марта 2004). Проверено 13 августа 2008. Архивировано 21 марта 2006 года.
  17. Куки и авторизация (англ.). MSDN. Проверено 13 августа 2008. Архивировано 26 августа 2011 года.
  18. Поддержка веб-браузеров (англ.) (недоступная ссылка). Университет Буффало (15 ноября 2004). Проверено 13 августа 2008. Архивировано 14 сентября 2005 года.
  19. Joanna Geary. Tracking the trackers: What are cookies? An introduction to web tracking. The Guardian (23 April 2012).
  20. Brian Quinton. Users Don't Understand, Can't Delete Cookies (англ.) (18 мая 2005). Проверено 7 августа 2008. Архивировано 26 августа 2011 года.
  21. Доклад по проблеме безопасности при использовании «куки» (англ.) = Bittersweet cookies. Some security and privacy considerations // Европейское агентство по безопасности сетей и информационной безопасности (ENISA). — 2011.
  22. ЦРУ поймано на краже куки (англ.). CBS News (20 марта 2002). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  23. Агентство удаляет незаконные файлы слежения (англ.). Associated Press (29 декабря 2005). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  24. Директива о неприкосновенности частной жизни и электронных коммуникаций (англ.) (12 июля 2002). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  25. Директива 2009/136/EC от 25 ноября 2009 г. (англ.). Проверено 6 июня 2017.
  26. Рабочая группа статьи 29 - Позиция 04/2012 от 7 июня 2012 об исключении из требования о получении согласия в отношении cookie файлов (англ.). Проверено 6 июня 2017.
  27. Proposal for an ePrivacy Regulation (англ.). Проверено 6 июня 2017.
  28. Елена Неб. Новые правила работы с персональными данными европейцев. texterra.ru (26 июня 2018).
  29. Настройки куки в Opera 9 (англ.). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  30. Wi-fi взлом веб-почты (англ.). BBC News (3 августа 2007). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  31. На что похожа XSS-кража куки? (англ.). Cgisecurity.com (май 2002). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  32. Снижение опасности межсайтового скриптинга с помощью HTTP-only кук (англ.). Microsoft. Проверено 8 августа 2008. Архивировано 13 августа 2011 года.
  33. Майкл Ховард; Кит Браун. 10 советов по защите кода (англ.). Microsoft (2000). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  34. Элинор Милз. Google снижает срок хранения куки для повышения безопасности (англ.). CNET Networks (16 июля 2007). Проверено 8 августа 2008. Архивировано 26 августа 2011 года.
  35. Введение в Хранение (англ.). MSDN. Проверено 8 августа 2008. Архивировано 26 августа 2011 года.

Ссылки

  • RFC 6265 (англ.) — текущая официальная спецификация для куки
  • RFC 2964 (англ.) — «Использование механизмов управления состоянием HTTP-сессии»
  • RFC 2965 (англ.) — «Механизмы контроля состояния HTTP-сессии. Новая ревизия. HTTP-Cookies 2»
  • Что такое cookies и как с ними работать

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

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

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии