Cookie: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Нежелательная ссылка |
Изменение "куки" на "cookie" в соответствии с общепринятыми стандартами (например, стайлгайдом Майкрософта) |
||
Строка 1: | Строка 1: | ||
{{Другие значения|Cookie}} |
{{Другие значения|Cookie}} |
||
{{HTTP}} |
{{HTTP}} |
||
''' |
'''Файлы cookie''' (от {{lang-en|cookie}} — печенье) — небольшой фрагмент данных, отправленный [[веб-сервер]]ом и хранимый на [[компьютер]]е пользователя. Веб-клиент (обычно [[Браузер|веб-браузер]]) всякий раз при попытке открыть страницу соответствующего сайта пересылает этот фрагмент данных веб-серверу в составе HTTP-запроса. Применяется для сохранения данных на стороне пользователя, на практике обычно используется для: |
||
* [[аутентификация|аутентификации]] пользователя; |
* [[аутентификация|аутентификации]] пользователя; |
||
* хранения персональных предпочтений и настроек пользователя; |
* хранения персональных предпочтений и настроек пользователя; |
||
* отслеживания состояния {{не переведено 5|Сеанс (информатика)|сеанса||Session (computer science)|}} доступа пользователя; |
* отслеживания состояния {{не переведено 5|Сеанс (информатика)|сеанса||Session (computer science)|}} доступа пользователя; |
||
* ведения статистики о [[Пользователь|пользователях]]. |
* ведения статистики о [[Пользователь|пользователях]]. |
||
Приём браузерами |
Приём браузерами файлов cookie требуют многие сайты с ограничениями доступа, большинство [[интернет-магазин]]ов.<ref>{{cite web|url=http://www.ozon.ru/context/detail/id/3480907/|title=Проблемы с работой интернет-магазина|publisher=[[OZON.ru]]|accessdate=12 августа 2008}}</ref> Настройка оформления и поведения многих [[веб-сайт]]ов по индивидуальным предпочтениям пользователя тоже основана на файлах cookie.<ref name="microsoft">{{cite web|url=http://www.microsoft.com/info/cookies.mspx|title=FAQ по куки|publisher=Microsoft|accessdate=12 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWpwhHj|archivedate=2011-08-26}}</ref> |
||
С момента своего появления |
С момента своего появления cookie вызывали обеспокоенность пользователей [[Интернет]]а, поскольку слежение за действиями и предпочтениями пользователей может подвергнуть опасности тайну личной жизни. Как результат, в Европейском Союзе, Соединённых Штатах и других странах были приняты соответствующие законы, регулирующие применение файлов cookie{{нет АИ|30|11|2009}}. Cookie легко [[сниффер|перехватить]] и подменить (например, для получения доступа к учетной записи), если пользователь использует нешифрованное соединение с сервером. В группе риска пользователи, выходящие в интернет при помощи публичных точек доступа [[Wi-Fi]] и не использующие при этом таких механизмов, как [[SSL]]. Шифрование позволяет также решить и другие проблемы, связанные с безопасностью передаваемых данных. |
||
⚫ | Имеется и ряд заблуждений о |
||
⚫ | |||
⚫ | Имеется и ряд заблуждений о cookie. Они главным образом основаны на уверенности людей, что файлы cookie являются [[Компьютерная программа|компьютерными программами]]. На самом деле, cookie — это простые текстовые [[Данные (вычислительная техника)|данные]], набор символов, передаваемый при запросах к веб-сайту, и они не могут выполнять какие-либо действия самостоятельно. В частности, файлы cookie не могут быть ни [[Вирус (компьютерный)|вирусами]], ни [[Шпионская программа|шпионскими программами]]. Таким образом, они могут быть опасны только в плане деанонимизации и слежения за действиями пользователя. |
||
⚫ | |||
== Назначение == |
== Назначение == |
||
Файлы cookie используются веб-серверами для различения пользователей и хранения данных о них. |
|||
К примеру, если вход на сайт осуществляется при помощи |
К примеру, если вход на сайт осуществляется при помощи cookie, то после ввода пользователем своих данных на странице входа они позволяют серверу запомнить, что пользователь уже идентифицирован, и ему разрешён доступ к соответствующим услугам и операциям.<ref name="microsoft" /> |
||
Многие сайты также используют |
Многие сайты также используют cookie для сохранения настроек пользователя. Эти настройки могут использоваться для персонализации, которая включает в себя выбор оформления и функциональности. Например, [[Википедия]] позволяет авторизованным пользователям выбрать [[Википедия:Персональное оформление|дизайн]] сайта. Поисковая система [[Google (поисковая система)|Google]] позволяет пользователям (в том числе и не зарегистрированным в ней) выбрать количество результатов поиска, отображаемых на одной [[веб-страница|странице]].<ref>{{cite web|url=http://www.google.com/support/bin/static.py?page=searchguides.html&ctx=preferences&hl=ru#number|title=Справочный центр, веб-поиск|publisher=[[Google (компания)|Google]]|accessdate=12 августа 2008|archiveurl=http://www.webcitation.org/61DWqUw5S|archivedate=2011-08-26}}</ref> |
||
Файлы cookie также используются для отслеживания действий пользователей на сайте. Как правило, это делается с целью сбора статистики, а рекламные компании на основе такой статистики формируют анонимные [[учётная запись|профили]] пользователей для более точного нацеливания рекламы.<ref>{{cite web|author=Киви Берд|url=http://www.ibusiness.ru/offline/2000/119/6438/|title=Целевая реклама - угроза приватности?|publisher=[[Компьютерра]]|accessdate=12 августа 2008|deadlink=404|archiveurl=http://web.archive.org/20130405044854/www.ibusiness.ru/offline/2000/119/6438/|archivedate=2013-04-05}}</ref> |
|||
== Понятие == |
== Понятие == |
||
[[Файл:HTTP cookie exchange.PNG|thumb|300px|Возможное взаимодействие между браузером и сервером.]] |
[[Файл:HTTP cookie exchange.PNG|thumb|300px|Возможное взаимодействие между браузером и сервером.]] |
||
В техническом плане |
В техническом плане cookie представляют собой фрагменты данных, изначально отправляемых веб-сервером браузеру. При каждом последующем посещении сайта браузер пересылает их обратно серверу. Без cookie каждый просмотр веб-страницы является изолированным действием, не связанным с просмотром других страниц того же сайта, а с помощью cookie можно выявить связь между просмотром разных страниц. Кроме отправки веб-сервером, cookie могут создаваться [[скрипт]]ами на языках вроде [[JavaScript]], если они поддерживаются и включены в браузере. |
||
Спецификации<ref name="Netscape">{{cite web|author=Netscape|url=http://lib.guru.ua/WEBMASTER/cookie_spec.txt|title=Предварительная спецификация кук|format=txt|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWr5bQ4|archivedate=2011-08-26}}</ref><ref name="rfc">RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP ([[IETF]])</ref> указывают минимальные объёмы, которые должны предоставляться браузерами для хранения |
Спецификации<ref name="Netscape">{{cite web|author=Netscape|url=http://lib.guru.ua/WEBMASTER/cookie_spec.txt|title=Предварительная спецификация кук|format=txt|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWr5bQ4|archivedate=2011-08-26}}</ref><ref name="rfc">RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP ([[IETF]])</ref> указывают минимальные объёмы, которые должны предоставляться браузерами для хранения cookie. Так, браузер должен хранить по меньшей мере 300 файлов cookie по 4096 байт каждый, и по меньшей мере 20 cookie для одного сервера или [[доменное имя|домена]]. |
||
Популярные браузеры имеют соответствующий максимум хранящихся |
Популярные браузеры имеют соответствующий максимум хранящихся файлов cookie для каждого домена: |
||
* [[Internet Explorer 6]] — 20 |
* [[Internet Explorer 6]] — 20 |
||
* [[Internet Explorer 7]] — 20 |
* [[Internet Explorer 7]] — 20 |
||
Строка 33: | Строка 36: | ||
* [[Firefox 2.0]] — 50 |
* [[Firefox 2.0]] — 50 |
||
На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, Internet Explorer предоставляет 4096 байт для всех |
На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, Internet Explorer предоставляет 4096 байт для всех файлов cookie в одном домене. |
||
Имена |
Имена файлов cookie нечувствительны к регистру в соответствии с разделом 3.1 RFC 2965. |
||
Cookie могут устанавливать дату их удаления, и в этом случае они будут автоматически удалены браузером в указанный срок. Если дата удаления не указана, cookie удаляются сразу, как только пользователь закроет браузер. Таким образом, указание даты истечения позволяет сохранить cookie более чем на один сеанс, и такие cookie называются постоянными. Например, интернет-магазин может использовать постоянные cookie для хранения кодов предметов, которые пользователь поместил в корзину покупок — и даже если пользователь закроет браузер, не совершив покупки, при последующем входе ему не придётся формировать корзину заново. |
|||
Хранение |
Хранение файлов cookie также может ограничиваться в зависимости от веб-сервера, домена или поддомена, где они были созданы. |
||
== История == |
== История == |
||
По одной из версий термин « |
По одной из версий, термин «cookie» (печенье) происходит от «[[Волшебные куки|волшебного печенья]]»<ref>{{cite web|author=Андрей Аликберов|datepublished=1998|url=http://www.citforum.ru/internet/html/cookie.shtml|title=Что такое cookies и как с ними работать|accessdate=2 августа 2008|archiveurl=http://www.webcitation.org/61DWtfqbB|archivedate=2011-08-26}}</ref> — набора данных, которые программа получает, и затем отправляет обратно неизменными. В июне 1994 года Лу Монтулли пришла идея использовать их при веб-соединении.<ref>{{cite web|author=John Schwartz|datepublished=4 сентября 2001|url=http://www.nytimes.com/2001/09/04/technology/04COOK.html|title=Giving Web a Memory Cost Its Users Privacy|publisher=[[New York Times]]|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWugEhM|archivedate=2011-08-26}}</ref> В то время он был сотрудником [[Netscape Communications]], которая разрабатывала по заказу пакет электронной коммерции. Файлы cookie стали решением проблемы надёжной реализации виртуальной корзины покупок. |
||
С помощью Джона Джаннандреа в тот же год Монтулли написал начальную спецификацию |
С помощью Джона Джаннандреа в тот же год Монтулли написал начальную спецификацию cookie. Mosaic Netscape 0.9beta, выпущенная 13 октября 1994 года,<ref>{{cite web|datepublished=13 октября 1994|url=http://news.cnet.com/Netscapes-original-browser-press-release/2030-1032_3-5406484.html|title=Netscape Communications Представляют Новый Сетевой Бесплатной Интернет-Навигатор|publisher=[[CNET Networks]]|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWvKlU0|archivedate=2011-08-26}}</ref><ref>{{cite web|author=Марк Андреассен|datepublished=13 октября 1994|url=http://groups.google.com/group/comp.infosystems.www.users/msg/9a210e5f72278328|title=Мир, вот он!|accessdate=7 августа 2008|lang=en|description=Сообщение на [[Usenet]]}}</ref> уже поддерживала cookie. Файлы cookie впервые начали использоваться вне лаборатории на сайте Netscape и определяли, посещал ли пользователь сайт ранее. Монтулли подал заявку на [[патент]] в 1995 году и получил его в 1998 году. Internet Explorer начал поддерживать cookie с версии 2, выпущенной в октябре [[1995 год]]а.<ref>{{cite web|author=Сэнди Хардмайер|datepublished=25 августа 2005|url=http://www.microsoft.com/windows/IE/community/columns/historyofie.mspx|title=История Internet Explorer|publisher=Microsoft|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWwPHfd|archivedate=2011-08-26}}</ref> |
||
Хотя некоторые люди знали о существовании |
Хотя некоторые люди знали о существовании cookie уже в первом квартале 1995 года,<ref>{{cite web|author=Роджер Кларк|datepublished=1 июня 1998|url=http://www.anu.edu.au/people/Roger.Clarke/II/Cookies.html|title=Куки|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWxAgJc|archivedate=2011-08-26}}</ref> широкая общественность узнала о них лишь после статьи в «[[Financial Times]]» от 12 февраля [[1996 год]]а. В том же году cookie оказались в центре внимания средств массовой информации, особенно из-за потенциальной угрозы [[приватность|приватности]]. Вопрос о файлах cookie был рассмотрен в Федеральной комиссии по торговле США в двух слушаниях в 1996 и 1997 годах. |
||
Развитие спецификаций |
Развитие спецификаций cookie на этом не остановилось. В частности, первые обсуждения формальной спецификации начались в апреле 1995 года. Была сформирована специальная рабочая группа в рамках [[IETF]]. В качестве отправной точки была выбрана спецификация Netscape. В феврале 1996 года рабочая группа определила сторонние cookie как серьёзную угрозу приватности. Выработанная спецификация была выпущена под названием RFC 2109 в феврале [[1997 год]]а. В ней указывалось, что сторонние cookie должны либо блокироваться, либо хотя бы не работать по умолчанию. |
||
В то время рекламные компании уже вовсю использовали сторонние |
В то время рекламные компании уже вовсю использовали сторонние cookie, и рекомендации RFC 2109 не поддерживались ни в браузерах Netscape, ни в Internet Explorer. Позднее, в октябре [[2000 год]]а, RFC 2109 была заменена новой спецификацией RFC 2965. |
||
== Заблуждения == |
== Заблуждения == |
||
С момента появления |
С момента появления cookie в СМИ и Интернете начали распространяться различные слухи.<ref>{{cite web|datepublished=2005|url=http://www.theallineed.com/computers/05072901.htm|title=Вопреки уверениям, куки - добро!|publisher=ARA Content|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWxsXn2|archivedate=2011-08-26}}</ref> В [[1998 год]]у компьютерный отдел [[Министерство энергетики США|Министерства энергетики Соединенных Штатов]] (CIAC) заявил, что опасности cookie не представляют, и пояснил, что «информация о том, откуда вы приходите и какие веб-страницы посещаете, и так сохраняется в [[лог-файл]]ы веб-серверов».<ref>{{cite web|datepublished=12 марта 1998|url=http://www.ciac.org/ciac/bulletins/i-034.shtml|title=I-034: Интернет-куки|publisher=[[Министерство энергетики США]]|accessdate=2008-08-07|lang=en|deadlink=unknown-host}}</ref> В [[2005 год]]у были опубликованы результаты исследования,<ref>{{cite web|author=Брайан Куинтон|datepublished=18 мая 2005|url=http://searchlineinfo.com/InsightExpress_cookie_study/|title=Исследование: Пользователи не понимают, что такое куки, и не умеют их удалять|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWyVAXI|archivedate=2011-08-26}}</ref> согласно которому значительный процент респондентов уверен, что: |
||
* |
* cookie, как [[сетевые черви|черви]] и [[Компьютерный вирус|вирусы]], могут стереть данные с [[жёсткий диск|жёсткого диска]] пользователя; |
||
* |
* cookie являются причиной [[всплывающее окно|всплывающих окон]]; |
||
* |
* cookie используются для почтового [[спам]]а; |
||
* |
* cookie используются только для рекламы. |
||
В действительности же |
В действительности же cookie представляют собой лишь данные, а не программный код: они не могут стереть или прочитать информацию с компьютера пользователя.<ref>{{cite web|author=Адам Пененберг|datepublished=7 ноября 2005|url=http://www.slate.com/id/2129656/|title=Куки-монстры|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWz8OSv|archivedate=2011-08-26}}</ref> Однако cookie позволяют проследить, какие веб-страницы просмотрены пользователем на данном сайте, и эта информация может быть сохранена в профиле пользователя. Такие профили зачастую анонимны и не содержат личной информации пользователей (имя, адрес и т. д.). Точнее, они не могут её содержать, пока пользователь не сделал эту информацию доступной. Но, даже несмотря на анонимность, эти профили стали предметом споров о сохранении приватности. |
||
== Работа |
== Работа cookie == |
||
=== Установка |
=== Установка cookie === |
||
Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице <nowiki>http://www.example.org/index.html</nowiki>, браузер отправляет на сервер <nowiki>www.example.org</nowiki> следующий запрос: |
Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице <nowiki>http://www.example.org/index.html</nowiki>, браузер отправляет на сервер <nowiki>www.example.org</nowiki> следующий запрос: |
||
{| |
{| |
||
Строка 80: | Строка 83: | ||
| '''сервер''' |
| '''сервер''' |
||
|} |
|} |
||
Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить |
Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить cookie: |
||
{| |
{| |
||
| |
| |
||
Строка 99: | Строка 102: | ||
| '''сервер''' |
| '''сервер''' |
||
|} |
|} |
||
Строка <code>Set-cookie</code> отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил |
Строка <code>Set-cookie</code> отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил cookie. В этом случае, если cookie поддерживаются браузером и их приём включён, браузер запоминает строку <code>name=value</code> (имя = значение) и отправляет её обратно серверу с каждым последующим запросом. Например, при запросе следующей страницы <nowiki>http://www.example.org/spec.html</nowiki> браузер пошлёт серверу <nowiki>www.example.org</nowiki> следующий запрос: |
||
{| |
{| |
||
| |
| |
||
Строка 118: | Строка 121: | ||
| '''сервер''' |
| '''сервер''' |
||
|} |
|} |
||
Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые |
Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые cookie. |
||
Значение |
Значение cookie может быть изменено сервером путём отправления новых строк <code>Set-Cookie: name=newvalue</code>. После этого браузер заменяет старый cookie с тем же name на новую строку. |
||
Cookie также могут устанавливаться программами на языках типа JavaScript, встроенными в текст страниц, или аналогичными скриптами, работающими в браузере. В JavaScript для этого используется объект <code>document.cookie</code>. Например, <code>document.cookie = "temperature=20"</code> создаст cookie под именем «temperature» и значением 20.<ref>{{cite web|author=Росс Шэннон|datepublished=26 февраля 2007|url=http://www.yourhtmlsource.com/javascript/cookies.html|title=Куки и JavaScript|accessdate=7 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DWzt4OP|archivedate=2011-08-26}}</ref> |
|||
=== Атрибуты |
=== Атрибуты cookie === |
||
Кроме пары имя/значение, |
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя. RFC 2965 также предусматривает, что cookie должны обязательно иметь номер версии, но это используется редко. Эти атрибуты должны идти после пары <code>name=newvalue</code> и разделяться точкой с запятой. Например: |
||
<code>Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org</code>. |
<code>Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org</code>. |
||
[[Файл:HTTP-Cookie-Google.png|thumb |
[[Файл:HTTP-Cookie-Google.png|thumb|200px|Образец HTTP-ответа google.com, содержащего cookie с атрибутами.]] |
||
Домен и путь говорят браузеру, что |
Домен и путь говорят браузеру, что cookie должны быть отправлены обратно на сервер при запросах [[URL]] для указанного домена и пути. Если они не указаны, используются домен и путь запрошенной страницы<ref name="rfc"/>. |
||
Фактически, |
Фактически, cookie определяются тройкой параметров имя-домен-путь (оригинальная спецификация Netscape учитывала только пару имя-путь<ref name="Netscape"/>). Иными словами, cookie с разными путями или доменами являются разными cookie, даже если имеют одинаковые имена. Соответственно, файл cookie меняется на новый, только если новый cookie имеет те же имя, путь и домен. |
||
Дата истечения указывает браузеру, когда удалить |
Дата истечения указывает браузеру, когда удалить cookie. Если срок истечения не указан, cookie удаляется по окончании пользовательского сеанса, то есть с закрытием браузера. Если же указана дата истечения срока хранения, cookie хранится до указанной даты. Дата истечения указывается в формате «Нед, ДД Мес ГГГГ ЧЧ:ММ:СС GMT». Например: |
||
<code>Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=.example.net</code> |
<code>Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=.example.net</code> |
||
cookie из примера выше имеет имя RMID и значение «732423sdfs73242». Срок его хранения истечёт 31 декабря 2010 года в 23:59:59. Путь «/» и домен «example.net» показывают браузеру, что нужно отправить cookie при просмотре любой страницы в домене example.net<ref name="wolenfaq">{{cite web|author=Дэвид Уолен|datepublished=6 августа 2002|url=http://www.cookiecentral.com/faq/|title=Неофициальный FAQ по куки|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX0Skd1|archivedate=2011-08-26}}</ref>. |
|||
=== Условия истечения срока хранения === |
=== Условия истечения срока хранения === |
||
Срок хранения |
Срок хранения cookie истекает в следующих случаях:<ref>{{cite web|url=http://webmaster.info.aol.com/aboutcookies.html|title=О куки|publisher=[[AOL]]|datepublished=15 марта 2004|accessdate=13 августа 2008|lang=en|deadlink=404|archiveurl=http://web.archive.org/20060321034700/webmaster.info.aol.com/aboutcookies.html|archivedate=2006-03-21}}</ref> |
||
# В конце сеанса (например, когда браузер закрывается), если |
# В конце сеанса (например, когда браузер закрывается), если cookie не являются постоянными. |
||
# Дата истечения была указана, и срок хранения вышел. |
# Дата истечения была указана, и срок хранения вышел. |
||
# Браузер удалил |
# Браузер удалил cookie по запросу пользователя. |
||
Заметим, что сервер может узнать, когда истекают сроки хранения |
Заметим, что сервер может узнать, когда истекают сроки хранения cookie, только когда браузер отправляет на сервер эту информацию. |
||
=== Аутентификация === |
=== Аутентификация === |
||
Файлы cookie могут использоваться сервером для опознания ранее [[Аутентификация в Интернете|аутентифицированных]] пользователей. Это происходит следующим образом:<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms936337.aspx|title=Куки и авторизация|publisher=[[MSDN]]|accessdate=13 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX0u0oM|archivedate=2011-08-26}}</ref> |
|||
# Пользователь вводит имя пользователя и пароль в текстовых полях страницы входа и отправляет их на сервер. |
# Пользователь вводит имя пользователя и пароль в текстовых полях страницы входа и отправляет их на сервер. |
||
# Сервер получает имя пользователя и пароль, проверяет их и, при их правильности, отправляет страницу успешного входа, прикрепив |
# Сервер получает имя пользователя и пароль, проверяет их и, при их правильности, отправляет страницу успешного входа, прикрепив cookie с неким идентификатором сессии. Этот файл cookie может быть действителен не только для текущей сессии браузера, но может быть настроен и на длительное хранение. |
||
# Каждый раз, когда пользователь запрашивает страницу с сервера, браузер автоматически отправляет |
# Каждый раз, когда пользователь запрашивает страницу с сервера, браузер автоматически отправляет cookie с идентификатором сессии серверу. Сервер проверяет идентификатор по своей базе идентификаторов и, при наличии в базе такого идентификатора, «узнаёт» пользователя. |
||
Этот метод широко используется на многих сайтах, например на [[Yahoo!]], в [[Википедия|Википедии]] и в [[Facebook]]. |
Этот метод широко используется на многих сайтах, например на [[Yahoo!]], в [[Википедия|Википедии]] и в [[Facebook]]. |
||
Многие браузеры (в частности Opera, FireFox) |
Многие браузеры (в частности Opera, FireFox) путем редактирования свойств cookie могут управлять поведением веб-сайтов. Изменив срок истечения непостоянных (сессионных) cookie, можно, например, получить формально-неограниченную сессию после авторизации на каком-либо сайте. Возможность редактирования cookie стандартными средствами отсутствует в Internet Explorer. Но, воспользовавшись иными механизмами, например, JavaScript, пользователь может изменить файл cookie. Более того, существует возможность заменить сессионные cookie постоянными (с указанием срока годности). |
||
Однако серверное программное обеспечение может отслеживать такие попытки. Для этого сервер выдаёт |
Однако серверное программное обеспечение может отслеживать такие попытки. Для этого сервер выдаёт cookie на определённый срок и записывает дату окончания cookie у себя каждый раз, когда пользователь обращается к серверу. Если файл cookie, присланный браузером, имеет дату годности, отличную от той, что хранится на сервере, значит это попытка подмены даты годности cookie. Сервер может отреагировать, например, запросить у пользователя повторную авторизацию. |
||
== Настройка браузера == |
== Настройка браузера == |
||
[[Файл:Cookies in Firefox 3.0.PNG|thumb|200px|Просмотр и настройка |
[[Файл:Cookies in Firefox 3.0.PNG|thumb|200px|Просмотр и настройка cookie в браузере Firefox 3.0]] Большинство современных браузеров поддерживают cookie.<ref>{{cite web|url=http://www.itpolicies.buffalo.edu/web_browser_support/|title=Поддержка веб-браузеров|publisher=[[Университет Буффало]]|datepublished=15 ноября 2004|accessdate=13 августа 2008|lang=en|deadlink=404|archiveurl=http://web.archive.org/20050914065452/www.itpolicies.buffalo.edu/web_browser_support/|archivedate=2005-09-14}}</ref> И, как правило, пользователь может выбрать, должны cookie использоваться или нет. Наиболее распространены следующие настройки браузеров:<ref name="wolenfaq" /> |
||
# Полное отключение |
# Полное отключение cookie. |
||
# Удаление |
# Удаление cookie при закрытии браузера. |
||
# Различение [[#Приватность и сторонние куки|сторонних |
# Различение [[#Приватность и сторонние куки|сторонних cookie]] с третьей стороны и соответствующее обращение с ними (например, ограничение или запрет для них). |
||
# Обработка |
# Обработка cookie на основе «белого» и/или «чёрного» списков, обновляемых пользователем или изготовителем браузера. Файлы cookie из «чёрного списка» блокируются. |
||
# Запрет |
# Запрет cookie от определённых доменов (разновидность «чёрного списка»). |
||
# Установка разумных сроков истечения |
# Установка разумных сроков истечения cookie. |
||
Большинство браузеров, поддерживающих JavaScript, позволяют пользователю увидеть активные на данном сайте |
Большинство браузеров, поддерживающих JavaScript, позволяют пользователю увидеть активные на данном сайте cookie, набрав <code>javascript:alert("Cookies: "+document.cookie)</code> или <code>javascript:prompt("Cookies:",document.cookie)</code> в адресной строке браузера<ref name="wolenfaq" />. Некоторые браузеры содержат менеджер cookie, позволяющий пользователю выборочно просмотреть и удалить cookie, хранящиеся в браузере. |
||
== Приватность и сторонние |
== Приватность и сторонние cookie == |
||
Файлы cookie значительным образом влияют на [[конфиденциальность]] и анонимность пользователей Интернета. Хотя cookie отправляются только на серверы домена, для которого они предназначены, веб-страница может подгружать изображения или другие компоненты из других доменов. Файлы cookie, получаемые во время подгрузки этих компонентов из других доменов, называются «сторонними»<ref> |
|||
{{статья |
{{статья |
||
| автор = |
| автор = |
||
Строка 195: | Строка 198: | ||
}}</ref>. |
}}</ref>. |
||
[[Файл:Third party cookie.png|thumb|400px|Устанавливая баннеры на разных сайтах и используя сторонние |
[[Файл:Third party cookie.png|thumb|400px|Устанавливая баннеры на разных сайтах и используя сторонние cookie, рекламная компания может отследить перемещение пользователей между этими сайтами.]] |
||
Рекламные компании используют сторонние |
Рекламные компании используют сторонние cookie для отслеживания перемещений пользователя по сайтам. В частности, рекламная компания может отслеживать пользователей на всех сайтах, где установлены их рекламные [[баннер]]ы. Знание страниц, посещённых пользователем, позволяет менять направленность рекламы в зависимости от предпочтений пользователя. |
||
Создание профиля пользователей рассматривается как потенциальная угроза приватности даже при отслеживании в рамках одного домена, но особенно это актуально при отслеживания на нескольких доменах с использованием сторонних |
Создание профиля пользователей рассматривается как потенциальная угроза приватности даже при отслеживании в рамках одного домена, но особенно это актуально при отслеживания на нескольких доменах с использованием сторонних cookie. По этой причине в некоторых странах cookie регулируются законодательством. |
||
[[Федеральное правительство США|Правительство Соединенных Штатов]] приняло строгие законы в отношении |
[[Федеральное правительство США|Правительство Соединенных Штатов]] приняло строгие законы в отношении cookie в 2000 году, после того как выяснилось, что [[DEA|Агентство по борьбе с наркотиками США]] использовало cookie для отслеживания пользователей, просмотревших их антинаркотическую рекламу в сети. В 2002 году Дэниел Брандт установил, что [[Центральное разведывательное управление|ЦРУ]] устанавливает на компьютеры постоянные cookie со сроком хранения до 2010 года. Когда ЦРУ было уведомлено о неправомерности подобного использования cookie, управление заявило, что это было непреднамеренно и прекратило их установку.<ref>{{cite web|datepublished=20 марта 2002|url=http://www.cbsnews.com/stories/2002/03/20/tech/main504131.shtml|title=ЦРУ поймано на краже куки|publisher=[[CBS News]]|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX1WQIe|archivedate=2011-08-26}}</ref> 25 декабря [[2005 год]]а Брандт обнаружил, что [[Агентство национальной безопасности (США)|Агентство национальной безопасности]] оставляло пару постоянных cookie после обновления программного обеспечения. После этого сообщения Агентство немедленно отключило cookie.<ref>{{cite web|datepublished=29 декабря 2005|url=http://www.nytimes.com/2005/12/29/national/29cookies.html|title=Агентство удаляет незаконные файлы слежения|publisher=[[Associated Press]]|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX2E9iP|archivedate=2011-08-26}}</ref> |
||
Директива Евросоюза о конфиденциальности электронных данных от 2002 года<ref>{{cite web|datepublished=12 июля 2002|url=http://eur-lex.europa.eu/smartapi/cgi/sga_doc?smartapi!celexapi!prod!CELEXnumdoc&lg=en&numdoc=32002L0058&model=guichett|title=Директива о неприкосновенности частной жизни и электронных коммуникаций|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX34Jxw|archivedate=2011-08-26}}</ref> содержит нормы, касающиеся использования |
Директива Евросоюза о конфиденциальности электронных данных от 2002 года<ref>{{cite web|datepublished=12 июля 2002|url=http://eur-lex.europa.eu/smartapi/cgi/sga_doc?smartapi!celexapi!prod!CELEXnumdoc&lg=en&numdoc=32002L0058&model=guichett|title=Директива о неприкосновенности частной жизни и электронных коммуникаций|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX34Jxw|archivedate=2011-08-26}}</ref> содержит нормы, касающиеся использования cookie. В частности, пункт 3 статьи 5 устанавливает, что хранение данных (в том числе cookie) может осуществляться, лишь если: |
||
# пользователю предоставляется информация о том, как эти данные используются; |
# пользователю предоставляется информация о том, как эти данные используются; |
||
# пользователь имеет возможность отказаться от этого. |
# пользователь имеет возможность отказаться от этого. |
||
Тем не менее |
Тем не менее в данной статье также говорится, что хранение технически необходимых данных освобождается от этих норм. Ожидалось, что директива вступит в силу с октября [[2003 год]]а, но доклад от декабря [[2004 год]]а отмечает, что эти положения не нашли применения на практике и что в некоторых государствах ([[Словакия]], [[Латвия]], [[Греция]], [[Бельгия]] и [[Люксембург]]) эти положения не внесены в национальные законодательства. Доклад предлагает провести тщательный анализ ситуации в государствах, участвующих в договоре. |
||
Спецификация [[P3P]] включает возможность для веб-сервера сообщить браузеру о нарушении конфиденциальности, указывая характер собираемой информации и цели сбора. Сюда входит и использование информации, полученной с помощью |
Спецификация [[P3P]] включает возможность для веб-сервера сообщить браузеру о нарушении конфиденциальности, указывая характер собираемой информации и цели сбора. Сюда входит и использование информации, полученной с помощью cookie. По спецификации P3P браузер может принимать или отклонять cookie согласно пользовательским настройкам или же спросить пользователя. |
||
Многие веб-браузеры, включая [[Safari]] от [[Apple]] и [[Internet Explorer]] версий 6 и 7 от Microsoft, поддерживают спецификации P3P, которые позволяют определить, следует ли разрешать сторонние |
Многие веб-браузеры, включая [[Safari]] от [[Apple]] и [[Internet Explorer]] версий 6 и 7 от Microsoft, поддерживают спецификации P3P, которые позволяют определить, следует ли разрешать сторонние cookie. Веб-браузер [[Opera]] позволяет пользователям отказаться от сторонних cookie и создать глобальные или выборочные профили безопасности для веб-доменов.<ref>{{cite web|url=http://operawiki.info/NewCookieSettings|title=Настройки куки в Opera 9|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX3ifpR|archivedate=2011-08-26}}</ref> [[Firefox]] 2 был лишён этой опции, но она была восстановлена в версии 3. |
||
== Недостатки |
== Недостатки cookie == |
||
Помимо проблем конфиденциальности, |
Помимо проблем конфиденциальности, cookie имеют и некоторые технические недостатки. В частности, они не всегда точно идентифицируют пользователя и могут быть причиной атак злоумышленников. |
||
=== Неточная идентификация === |
=== Неточная идентификация === |
||
Если на компьютере используется более одного браузера, то, как правило, каждый имеет отдельное хранилище для |
Если на компьютере используется более одного браузера, то, как правило, каждый имеет отдельное хранилище для cookie. Поэтому cookie идентифицируют не человека, а сочетание [[Учётная запись|учётной записи]], компьютера, и браузера. Таким образом, любой человек, который использует несколько учётных записей, компьютеров или браузеров, имеет несколько наборов cookie. |
||
Аналогично, |
Аналогично, cookie не различают пользователей, пользующихся одним компьютером и браузером, если не используются разные учётные записи в операционной системе. |
||
=== Кража |
=== Кража cookie === |
||
Во время нормальной эксплуатации сервер и браузер пользователя постоянно обмениваются |
Во время нормальной эксплуатации сервер и браузер пользователя постоянно обмениваются cookie. Поскольку cookie могут содержать конфиденциальную информацию (имя пользователя, условия доступа и т. д.), их содержимое не должно быть доступно другим. Кража cookie — это акт [[Несанкционированный доступ к информации|несанкционированного перехвата cookie]] посторонними. |
||
[[Файл:Cookie-sniffing.PNG|thumb|200px| |
[[Файл:Cookie-sniffing.PNG|thumb|200px|Файлы cookie могут быть украдены другим компьютером, читающим трафик сети.]] |
||
Файлы cookie могут быть украдены с помощью анализа [[сетевой трафик|трафика]] — это называется взломом сессии. Сетевой трафик может быть перехвачен и прочитан не только его отправителем и получателем (особенно в публичных сетях [[Wi-Fi]]). Этот трафик включает в себя и cookie, передаваемые через незашифрованные HTTP-сессии. Там, где сетевой трафик не шифруется, злоумышленники могут прочесть сообщения пользователей сети, в том числе их cookie, используя программы, называемые [[сниффер]]ами. |
|||
Эта проблема может быть решена путём установления между пользователем и сервером шифрованного соединения с использованием протокола [[HTTPS]]. Сервер также может использовать специальный флаг при установке |
Эта проблема может быть решена путём установления между пользователем и сервером шифрованного соединения с использованием протокола [[HTTPS]]. Сервер также может использовать специальный флаг при установке cookie, после чего браузер будет передавать их только по надёжному каналу, например, через [[SSL]]-соединение.<ref name="rfc"/> |
||
Однако большое число веб-сайтов, даже использующих безопасные HTTPS-сессии для идентификации пользователя, затем отправляют |
Однако большое число веб-сайтов, даже использующих безопасные HTTPS-сессии для идентификации пользователя, затем отправляют cookie и другие данные более простым незашифрованным HTTP-соединением. Злоумышленники могут легко перехватить cookie других пользователей и использовать их на соответствующих веб-сайтах.<ref>{{cite web|datepublished=3 августа 2007|url=http://news.bbc.co.uk/2/hi/technology/6929258.stm|title=Wi-fi взлом веб-почты|publisher=[[BBC News]]|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX4CmXi|archivedate=2011-08-26}}</ref> |
||
[[Файл:Cookie-theft.PNG|thumb|200px|Межсайтовый скриптинг: |
[[Файл:Cookie-theft.PNG|thumb|200px|Межсайтовый скриптинг: cookie должны обмениваться лишь между сервером и клиентом, а отправляться третьей стороне.]] Для того чтобы гарантировать передачу cookie только через HTTPS-сессию, они должны иметь атрибут Secure. |
||
Другой способ кражи |
Другой способ кражи cookie — [[межсайтовый скриптинг]] и несанкционированная отправка cookie на серверы, которые не должны получать их. Современные браузеры могут исполнять фрагменты кода, полученные с сервера. Если cookie доступны во время этого исполнения, их содержимое может в той или иной форме оказаться на серверах, которые не должны получать к ним доступ. Шифрование cookie не поможет в этом случае.<ref>{{cite web|datepublished=май 2002|url=http://www.cgisecurity.com/articles/xss-faq.shtml#theft|title=На что похожа XSS-кража куки?|publisher=[[Cgisecurity.com]]|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX53rTG|archivedate=2011-08-26}}</ref> |
||
Следующий вид межсайтового скриптинга, как правило, используют на сайтах, где пользователям разрешено отправлять сообщения с HTML-содержимым. При вставке соответствующего PHP/Javascript -кода в сообщение атакующий может получить |
Следующий вид межсайтового скриптинга, как правило, используют на сайтах, где пользователям разрешено отправлять сообщения с HTML-содержимым. При вставке соответствующего PHP/Javascript -кода в сообщение атакующий может получить cookie других пользователей. |
||
Эти атаки можно предотвратить установкой флага HttpOnly,<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms533046.aspx|title=Снижение опасности межсайтового скриптинга с помощью HTTP-only кук|publisher=Microsoft|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/60ujxtZnN|archivedate=2011-08-13}}</ref> делающей |
Эти атаки можно предотвратить установкой флага HttpOnly,<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms533046.aspx|title=Снижение опасности межсайтового скриптинга с помощью HTTP-only кук|publisher=Microsoft|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/60ujxtZnN|archivedate=2011-08-13}}</ref> делающей cookie недоступными для скриптов со стороны клиента. Тем не менее веб-разработчики должны предусматривать защиту от межсайтового скриптинга на стадии [[Веб-разработка|разработки]] веб-сайтов.<ref>{{cite web|author=Майкл Ховард|coauthors=Кит Браун|datepublished=2000|url=http://msdn.microsoft.com/ru-ru/magazine/cc188938(en-us).aspx|title=10 советов по защите кода|publisher=Microsoft|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX5Tc3Z|archivedate=2011-08-26}}</ref> |
||
=== Подмена |
=== Подмена cookie === <!--понятия «Отравление куки» не существует. Такое понятие существует(-вовало) только на русской Википедии. Не надо переводить английские слова на русский дословно! Забейте в гугле(google.ru) варианты «Подмена куки» и «Отравление куки» (с кавычками) и вы увидите что правильное понятие это «Подмена куки»--> |
||
[[Файл:Cookie-poison.PNG|thumb|200px|Подмена |
[[Файл:Cookie-poison.PNG|thumb|200px|Подмена cookie: атакующий отправляет серверу подложные cookie, возможно, изменив легитимные cookie, ранее полученные от сервера.]] |
||
Хотя теоретически |
Хотя теоретически cookie должны сохраняться и отправляться назад на сервер неизменными, злоумышленник может изменить их содержимое перед отправкой. К примеру, cookie могут содержать общую сумму, которую пользователь должен уплатить за свои покупки; изменив это значение, злоумышленник сможет заплатить меньше установленной суммы. Процесс изменения содержимого cookie называется ''подменой cookie''. |
||
Для защиты от подобных атак большинство веб-сайтов хранят в |
Для защиты от подобных атак большинство веб-сайтов хранят в cookie лишь идентификатор сессии — случайно сгенерированное число или набор символов, используемое для определения сессии, в то время как вся другая информация хранится на сервере. В этом случае подмена cookie значительно затрудняется. |
||
=== Межсайтовые |
=== Межсайтовые cookie === |
||
[[Файл:Cookie-cooking.PNG|thumb|200px|Атакующий использует баг браузера для отправки серверу подложных |
[[Файл:Cookie-cooking.PNG|thumb|200px|Атакующий использует баг браузера для отправки серверу подложных cookie.]] |
||
Каждый сайт должен иметь свои собственные |
Каждый сайт должен иметь свои собственные cookie, и сайт <nowiki>example.com</nowiki> не должен изменять или устанавливать cookie другого сайта <nowiki>example.org</nowiki>. Уязвимости веб-браузеров позволяют вредоносным сайтам нарушать это правило. Это похоже на отправление cookie, но здесь злоумышленник атакует пользователей с уязвимыми браузерами, а не сайт напрямую. Целью таких атак могут быть идентификаторы сессий. |
||
Для защиты пользователям рекомендуется использовать последние версии браузеров, в которых эта проблема исправлена. |
Для защиты пользователям рекомендуется использовать последние версии браузеров, в которых эта проблема исправлена. |
||
=== Нестабильность между клиентом и сервером === |
=== Нестабильность между клиентом и сервером === |
||
Файлы cookie могут вызвать противоречия между клиентом и сервером. Если пользователь получает cookie, а затем нажимает кнопку «Назад» в браузере, то состояние браузера уже другое по сравнению с моментом получения cookie. Для примера возьмем электронный магазин с корзиной покупок, основанной на применении cookie: пользователь добавляет покупку в корзину, затем нажимает кнопку «Назад», но покупка остаётся в корзине, хотя пользователь, возможно, хотел отменить покупку. Это может привести к путанице и ошибкам. Веб-разработчики должны помнить об этом и принимать меры для решения таких ситуаций. |
|||
=== Срок действия |
=== Срок действия cookie === |
||
Постоянные |
Постоянные cookie критикуются экспертами за свой долгий срок хранения, который позволяет веб-сайтам отслеживать пользователей и создавать их профиль с течением времени.<ref>{{cite web|author=Элинор Милз|datepublished=16 июля 2007|url=http://news.cnet.com/8301-10784_3-9745630-7.html|title=Google снижает срок хранения куки для повышения безопасности|publisher=[[CNET Networks]]|accessdate=8 августа 2008|lang=en|archiveurl=http://www.webcitation.org/61DX60XTx|archivedate=2011-08-26}}</ref> Здесь затрагиваются и вопросы безопасности, поскольку украденные постоянные cookie могут использоваться на протяжении значительного периода времени. |
||
Кроме того, правильно составленная вредоносная программа, которая может быть запущена после аутентификации пользователя, сможет перенести сессионные |
Кроме того, правильно составленная вредоносная программа, которая может быть запущена после аутентификации пользователя, сможет перенести сессионные cookie на компьютер злоумышленника, что в первом приближении позволит посещать защищённый сайт без ввода имени пользователя и пароля сколь угодно долгое время. |
||
Обычные |
Обычные cookie имеют хоть и очень большой, но ограниченный «срок жизни», после чего удаляются. Кроме того, любые cookie в браузере можно удалить с помощью специальной опции. В результате браузер перестает идентифицировать посетителя при повторном заходе на сайт. Польский специалист Сэмми Камкар решил систематизировать наиболее «живучие» cookie, в результате чего появилась JavaScript-библиотека под названием Everycookie. Такие чудо-cookie теоретически позволяют идентифицировать любого посетителя сайта при его возвращении на страницу. Сайт, использующий библиотеки Everycookie, без труда обходит все меры по сохранению анонимности (хотя некоторые антивирусы могут определять такие сайты как опасные). Для защиты от Everycookie рекомендуется использование режима Private Browsing, либо специальных программ, таких, как Mil Shield. |
||
== Альтернативы |
== Альтернативы cookie == |
||
Некоторые операции, для которых используются |
Некоторые операции, для которых используются cookie, могут быть реализованы с помощью других механизмов. Тем не менее эти альтернативы имеют свои недостатки, которые делают cookie порой более предпочтительными на практике. Большинство этих альтернатив позволяет отслеживать пользователя, хотя и менее надёжным способом, чем cookie. Как результат, неприкосновенность частной жизни остаётся под угрозой, даже если cookie отключены браузером или не устанавливаются сервером. |
||
=== IP-адрес === |
=== IP-адрес === |
||
{{main|IP-адрес}} |
{{main|IP-адрес}} |
||
Этот ненадёжный метод отслеживания пользователей основан на хранении [[IP-адрес]]ов компьютеров, просматривающих страницы. Данная техника доступна с самого появления [[World Wide Web]], которая требует знания IP-адреса клиента для загрузки страницы. Эту информацию можно хранить на сервере вне зависимости от того, используются |
Этот ненадёжный метод отслеживания пользователей основан на хранении [[IP-адрес]]ов компьютеров, просматривающих страницы. Данная техника доступна с самого появления [[World Wide Web]], которая требует знания IP-адреса клиента для загрузки страницы. Эту информацию можно хранить на сервере вне зависимости от того, используются cookie или нет. |
||
Тем не менее этот способ менее надёжен, чем |
Тем не менее этот способ менее надёжен, чем cookie, поскольку компьютеры и прокси могут совместно использоваться несколькими пользователями, а один компьютер может использовать разные IP-адреса в разных сессиях (динамический IP-адрес). |
||
Отслеживание по IP-адресу может оказаться невозможным и при использовании систем сохранения анонимности (например, [[Tor]]). В таких системах один браузер может иметь несколько IP-адресов, и несколько пользователей могут использовать один IP-адрес, в результате чего отслеживание IP-адреса не представляется возможным. |
Отслеживание по IP-адресу может оказаться невозможным и при использовании систем сохранения анонимности (например, [[Tor]]). В таких системах один браузер может иметь несколько IP-адресов, и несколько пользователей могут использовать один IP-адрес, в результате чего отслеживание IP-адреса не представляется возможным. |
||
Строка 274: | Строка 277: | ||
=== URL (строка запроса) === |
=== URL (строка запроса) === |
||
{{main|URL}} |
{{main|URL}} |
||
Более прогрессивная методика основана на встраивании данных в URL. Обычно для этого используется строка запроса, но так же могут задействоваться и другие части URL. Языки [[JavaScript]] и [[PHP]] активно используют эти механизмы при отключенных |
Более прогрессивная методика основана на встраивании данных в URL. Обычно для этого используется строка запроса, но так же могут задействоваться и другие части URL. Языки [[JavaScript]] и [[PHP]] активно используют эти механизмы при отключенных cookie. |
||
Веб-сервер добавляет строку запроса к ссылке на веб-страницу при её отправке в браузере. Когда пользователь переходит по ссылке, браузер возвращает строку запроса серверу. |
Веб-сервер добавляет строку запроса к ссылке на веб-страницу при её отправке в браузере. Когда пользователь переходит по ссылке, браузер возвращает строку запроса серверу. |
||
В этом плане строка запроса и |
В этом плане строка запроса и cookie очень схожи: они являются фрагментами информации сервера, возвращаемой обратно браузером. Но есть и определённые различия: так как строка запроса является частью URL, то при повторном использовании этого URL на сервер передастся та же информация. Например, если опции пользователя кодированы в строке запроса URL, и пользователь отправляет этот URL другому пользователю, эти опции будут действовать и для другого пользователя. |
||
Более того, даже если пользователь повторно обращается к одной и той же странице, нет никакой гарантии, что строка запроса останется неизменной. Например, при переходе с внутренних страниц сайта и с внешних поисковых систем |
Более того, даже если пользователь повторно обращается к одной и той же странице, нет никакой гарантии, что строка запроса останется неизменной. Например, при переходе с внутренних страниц сайта и с внешних поисковых систем строки запроса будут разными, когда cookie оставались бы одинаковыми. |
||
Другой недостаток строки запроса проявляется в вопросах безопасности: хранение идентификатора сессии в строке запроса упрощает проведение атаки. Передача идентификатора в |
Другой недостаток строки запроса проявляется в вопросах безопасности: хранение идентификатора сессии в строке запроса упрощает проведение атаки. Передача идентификатора в cookie более безопасна. |
||
=== Скрытые поля формы === |
=== Скрытые поля формы === |
||
Одним из способов отслеживания сессии с помощью выполняемой на стороне сервера программы является использование веб-форм со скрытыми полями. Этот метод очень похож на строку запроса URL и обладает почти теми же преимуществами и недостатками, а если параметры формы отправляются HTTP-методом GET, то поля фактически станут частью URL, который браузер отправит на сервер. Но большинство форм обрабатывается HTTP POST, при которой информация не является ни частью URL, ни |
Одним из способов отслеживания сессии с помощью выполняемой на стороне сервера программы является использование веб-форм со скрытыми полями. Этот метод очень похож на строку запроса URL и обладает почти теми же преимуществами и недостатками, а если параметры формы отправляются HTTP-методом GET, то поля фактически станут частью URL, который браузер отправит на сервер. Но большинство форм обрабатывается HTTP POST, при которой информация не является ни частью URL, ни cookie. |
||
Этот подход даёт два преимущества в вопросе отслеживания: во-первых, вставка информации в HTML-код и в POST, а не в URL, означает, что средний пользователь её просто не заметит, во-вторых, информация сессии не копируется с копированием URL (например, когда пользователь отправляет ссылку по электронной почте). Недостаток метода состоит в том, что информация сессии содержится в HTML-коде, поэтому веб-страница должна генерироваться каждый раз, когда её запрашивают, что увеличивает нагрузку на веб-сервер. |
Этот подход даёт два преимущества в вопросе отслеживания: во-первых, вставка информации в HTML-код и в POST, а не в URL, означает, что средний пользователь её просто не заметит, во-вторых, информация сессии не копируется с копированием URL (например, когда пользователь отправляет ссылку по электронной почте). Недостаток метода состоит в том, что информация сессии содержится в HTML-коде, поэтому веб-страница должна генерироваться каждый раз, когда её запрашивают, что увеличивает нагрузку на веб-сервер. |
||
=== HTTP-аутентификация === |
=== HTTP-аутентификация === |
||
Протокол HTTP включает в себя базовую аутентификацию и шифрование, которые разрешают доступ к странице, только когда пользователь введёт правильное имя пользователя и пароль. Если сервер запрашивает подобное, то браузер обращается к пользователю и, получив нужные данные, сохраняет и использует их для доступа к другим страницам, не требуя от пользователя вводить их заново. С точки зрения пользователя эффект тот же, что и при использовании |
Протокол HTTP включает в себя базовую аутентификацию и шифрование, которые разрешают доступ к странице, только когда пользователь введёт правильное имя пользователя и пароль. Если сервер запрашивает подобное, то браузер обращается к пользователю и, получив нужные данные, сохраняет и использует их для доступа к другим страницам, не требуя от пользователя вводить их заново. С точки зрения пользователя эффект тот же, что и при использовании cookie: имя пользователя и пароль требуются лишь однажды, и потом пользователь получает доступ к сайту. При базовой аутентификации сочетание имени пользователя и пароля отправляется на сервер при каждом запросе браузера в незашифрованном виде. Это означает, что если кто-то перехватывает трафик, он сможет получить эту информацию и впоследствии использовать. При шифрованной аутентификации имя пользователя и пароль шифруются со случайным [[Ключ (криптография)|ключом]], созданным сервером. |
||
=== Сохранение на клиентской стороне === |
=== Сохранение на клиентской стороне === |
Версия от 16:11, 25 февраля 2016
Файлы cookie (от англ. cookie — печенье) — небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя. Веб-клиент (обычно веб-браузер) всякий раз при попытке открыть страницу соответствующего сайта пересылает этот фрагмент данных веб-серверу в составе HTTP-запроса. Применяется для сохранения данных на стороне пользователя, на практике обычно используется для:
- аутентификации пользователя;
- хранения персональных предпочтений и настроек пользователя;
- отслеживания состояния сеанса?! доступа пользователя;
- ведения статистики о пользователях.
Приём браузерами файлов cookie требуют многие сайты с ограничениями доступа, большинство интернет-магазинов.[1] Настройка оформления и поведения многих веб-сайтов по индивидуальным предпочтениям пользователя тоже основана на файлах cookie.[2]
С момента своего появления cookie вызывали обеспокоенность пользователей Интернета, поскольку слежение за действиями и предпочтениями пользователей может подвергнуть опасности тайну личной жизни. Как результат, в Европейском Союзе, Соединённых Штатах и других странах были приняты соответствующие законы, регулирующие применение файлов cookie[источник не указан 5273 дня]. Cookie легко перехватить и подменить (например, для получения доступа к учетной записи), если пользователь использует нешифрованное соединение с сервером. В группе риска пользователи, выходящие в интернет при помощи публичных точек доступа Wi-Fi и не использующие при этом таких механизмов, как SSL. Шифрование позволяет также решить и другие проблемы, связанные с безопасностью передаваемых данных.
Имеется и ряд заблуждений о cookie. Они главным образом основаны на уверенности людей, что файлы cookie являются компьютерными программами. На самом деле, cookie — это простые текстовые данные, набор символов, передаваемый при запросах к веб-сайту, и они не могут выполнять какие-либо действия самостоятельно. В частности, файлы cookie не могут быть ни вирусами, ни шпионскими программами. Таким образом, они могут быть опасны только в плане деанонимизации и слежения за действиями пользователя.
Большинство современных браузеров позволяет пользователям выбрать — принимать файлы cookie или нет, но их отключение делает невозможной работу с некоторыми сайтами. Кроме того, необходимость частого ввода логина и пароля делает работу с сайтами менее удобной.
Назначение
Файлы cookie используются веб-серверами для различения пользователей и хранения данных о них.
К примеру, если вход на сайт осуществляется при помощи cookie, то после ввода пользователем своих данных на странице входа они позволяют серверу запомнить, что пользователь уже идентифицирован, и ему разрешён доступ к соответствующим услугам и операциям.[2]
Многие сайты также используют cookie для сохранения настроек пользователя. Эти настройки могут использоваться для персонализации, которая включает в себя выбор оформления и функциональности. Например, Википедия позволяет авторизованным пользователям выбрать дизайн сайта. Поисковая система Google позволяет пользователям (в том числе и не зарегистрированным в ней) выбрать количество результатов поиска, отображаемых на одной странице.[3]
Файлы cookie также используются для отслеживания действий пользователей на сайте. Как правило, это делается с целью сбора статистики, а рекламные компании на основе такой статистики формируют анонимные профили пользователей для более точного нацеливания рекламы.[4]
Понятие
В техническом плане cookie представляют собой фрагменты данных, изначально отправляемых веб-сервером браузеру. При каждом последующем посещении сайта браузер пересылает их обратно серверу. Без cookie каждый просмотр веб-страницы является изолированным действием, не связанным с просмотром других страниц того же сайта, а с помощью cookie можно выявить связь между просмотром разных страниц. Кроме отправки веб-сервером, cookie могут создаваться скриптами на языках вроде JavaScript, если они поддерживаются и включены в браузере.
Спецификации[5][6] указывают минимальные объёмы, которые должны предоставляться браузерами для хранения cookie. Так, браузер должен хранить по меньшей мере 300 файлов cookie по 4096 байт каждый, и по меньшей мере 20 cookie для одного сервера или домена.
Популярные браузеры имеют соответствующий максимум хранящихся файлов cookie для каждого домена:
- Internet Explorer 6 — 20
- Internet Explorer 7 — 20
- Opera 9 — 30
- Firefox 1.5 — 50
- Firefox 2.0 — 50
На практике, некоторые браузеры могут накладывать более жёсткие ограничения. К примеру, Internet Explorer предоставляет 4096 байт для всех файлов cookie в одном домене.
Имена файлов cookie нечувствительны к регистру в соответствии с разделом 3.1 RFC 2965.
Cookie могут устанавливать дату их удаления, и в этом случае они будут автоматически удалены браузером в указанный срок. Если дата удаления не указана, cookie удаляются сразу, как только пользователь закроет браузер. Таким образом, указание даты истечения позволяет сохранить cookie более чем на один сеанс, и такие cookie называются постоянными. Например, интернет-магазин может использовать постоянные cookie для хранения кодов предметов, которые пользователь поместил в корзину покупок — и даже если пользователь закроет браузер, не совершив покупки, при последующем входе ему не придётся формировать корзину заново.
Хранение файлов cookie также может ограничиваться в зависимости от веб-сервера, домена или поддомена, где они были созданы.
История
По одной из версий, термин «cookie» (печенье) происходит от «волшебного печенья»[7] — набора данных, которые программа получает, и затем отправляет обратно неизменными. В июне 1994 года Лу Монтулли пришла идея использовать их при веб-соединении.[8] В то время он был сотрудником Netscape Communications, которая разрабатывала по заказу пакет электронной коммерции. Файлы cookie стали решением проблемы надёжной реализации виртуальной корзины покупок.
С помощью Джона Джаннандреа в тот же год Монтулли написал начальную спецификацию cookie. Mosaic Netscape 0.9beta, выпущенная 13 октября 1994 года,[9][10] уже поддерживала cookie. Файлы cookie впервые начали использоваться вне лаборатории на сайте Netscape и определяли, посещал ли пользователь сайт ранее. Монтулли подал заявку на патент в 1995 году и получил его в 1998 году. Internet Explorer начал поддерживать cookie с версии 2, выпущенной в октябре 1995 года.[11]
Хотя некоторые люди знали о существовании cookie уже в первом квартале 1995 года,[12] широкая общественность узнала о них лишь после статьи в «Financial Times» от 12 февраля 1996 года. В том же году cookie оказались в центре внимания средств массовой информации, особенно из-за потенциальной угрозы приватности. Вопрос о файлах cookie был рассмотрен в Федеральной комиссии по торговле США в двух слушаниях в 1996 и 1997 годах.
Развитие спецификаций cookie на этом не остановилось. В частности, первые обсуждения формальной спецификации начались в апреле 1995 года. Была сформирована специальная рабочая группа в рамках IETF. В качестве отправной точки была выбрана спецификация Netscape. В феврале 1996 года рабочая группа определила сторонние cookie как серьёзную угрозу приватности. Выработанная спецификация была выпущена под названием RFC 2109 в феврале 1997 года. В ней указывалось, что сторонние cookie должны либо блокироваться, либо хотя бы не работать по умолчанию.
В то время рекламные компании уже вовсю использовали сторонние cookie, и рекомендации RFC 2109 не поддерживались ни в браузерах Netscape, ни в Internet Explorer. Позднее, в октябре 2000 года, RFC 2109 была заменена новой спецификацией RFC 2965.
Заблуждения
С момента появления cookie в СМИ и Интернете начали распространяться различные слухи.[13] В 1998 году компьютерный отдел Министерства энергетики Соединенных Штатов (CIAC) заявил, что опасности cookie не представляют, и пояснил, что «информация о том, откуда вы приходите и какие веб-страницы посещаете, и так сохраняется в лог-файлы веб-серверов».[14] В 2005 году были опубликованы результаты исследования,[15] согласно которому значительный процент респондентов уверен, что:
- cookie, как черви и вирусы, могут стереть данные с жёсткого диска пользователя;
- cookie являются причиной всплывающих окон;
- cookie используются для почтового спама;
- cookie используются только для рекламы.
В действительности же cookie представляют собой лишь данные, а не программный код: они не могут стереть или прочитать информацию с компьютера пользователя.[16] Однако cookie позволяют проследить, какие веб-страницы просмотрены пользователем на данном сайте, и эта информация может быть сохранена в профиле пользователя. Такие профили зачастую анонимны и не содержат личной информации пользователей (имя, адрес и т. д.). Точнее, они не могут её содержать, пока пользователь не сделал эту информацию доступной. Но, даже несмотря на анонимность, эти профили стали предметом споров о сохранении приватности.
Работа cookie
Установка cookie
Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице http://www.example.org/index.html, браузер отправляет на сервер www.example.org следующий запрос:
GET /index.html HTTP/1.1 |
||
браузер | сервер |
Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить cookie:
HTTP/1.1 200 OK |
||
браузер | сервер |
Строка Set-cookie
отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил cookie. В этом случае, если cookie поддерживаются браузером и их приём включён, браузер запоминает строку name=value
(имя = значение) и отправляет её обратно серверу с каждым последующим запросом. Например, при запросе следующей страницы http://www.example.org/spec.html браузер пошлёт серверу www.example.org следующий запрос:
GET /spec.html HTTP/1.1 |
||
браузер | сервер |
Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые cookie.
Значение cookie может быть изменено сервером путём отправления новых строк Set-Cookie: name=newvalue
. После этого браузер заменяет старый cookie с тем же name на новую строку.
Cookie также могут устанавливаться программами на языках типа JavaScript, встроенными в текст страниц, или аналогичными скриптами, работающими в браузере. В JavaScript для этого используется объект document.cookie
. Например, document.cookie = "temperature=20"
создаст cookie под именем «temperature» и значением 20.[17]
Атрибуты cookie
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя. RFC 2965 также предусматривает, что cookie должны обязательно иметь номер версии, но это используется редко. Эти атрибуты должны идти после пары name=newvalue
и разделяться точкой с запятой. Например:
Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org
.
Домен и путь говорят браузеру, что cookie должны быть отправлены обратно на сервер при запросах URL для указанного домена и пути. Если они не указаны, используются домен и путь запрошенной страницы[6].
Фактически, cookie определяются тройкой параметров имя-домен-путь (оригинальная спецификация Netscape учитывала только пару имя-путь[5]). Иными словами, cookie с разными путями или доменами являются разными cookie, даже если имеют одинаковые имена. Соответственно, файл cookie меняется на новый, только если новый cookie имеет те же имя, путь и домен.
Дата истечения указывает браузеру, когда удалить cookie. Если срок истечения не указан, cookie удаляется по окончании пользовательского сеанса, то есть с закрытием браузера. Если же указана дата истечения срока хранения, cookie хранится до указанной даты. Дата истечения указывается в формате «Нед, ДД Мес ГГГГ ЧЧ:ММ:СС GMT». Например:
Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=.example.net
cookie из примера выше имеет имя RMID и значение «732423sdfs73242». Срок его хранения истечёт 31 декабря 2010 года в 23:59:59. Путь «/» и домен «example.net» показывают браузеру, что нужно отправить cookie при просмотре любой страницы в домене example.net[18].
Условия истечения срока хранения
Срок хранения cookie истекает в следующих случаях:[19]
- В конце сеанса (например, когда браузер закрывается), если cookie не являются постоянными.
- Дата истечения была указана, и срок хранения вышел.
- Браузер удалил cookie по запросу пользователя.
Заметим, что сервер может узнать, когда истекают сроки хранения cookie, только когда браузер отправляет на сервер эту информацию.
Аутентификация
Файлы cookie могут использоваться сервером для опознания ранее аутентифицированных пользователей. Это происходит следующим образом:[20]
- Пользователь вводит имя пользователя и пароль в текстовых полях страницы входа и отправляет их на сервер.
- Сервер получает имя пользователя и пароль, проверяет их и, при их правильности, отправляет страницу успешного входа, прикрепив cookie с неким идентификатором сессии. Этот файл cookie может быть действителен не только для текущей сессии браузера, но может быть настроен и на длительное хранение.
- Каждый раз, когда пользователь запрашивает страницу с сервера, браузер автоматически отправляет cookie с идентификатором сессии серверу. Сервер проверяет идентификатор по своей базе идентификаторов и, при наличии в базе такого идентификатора, «узнаёт» пользователя.
Этот метод широко используется на многих сайтах, например на Yahoo!, в Википедии и в Facebook.
Многие браузеры (в частности Opera, FireFox) путем редактирования свойств cookie могут управлять поведением веб-сайтов. Изменив срок истечения непостоянных (сессионных) cookie, можно, например, получить формально-неограниченную сессию после авторизации на каком-либо сайте. Возможность редактирования cookie стандартными средствами отсутствует в Internet Explorer. Но, воспользовавшись иными механизмами, например, JavaScript, пользователь может изменить файл cookie. Более того, существует возможность заменить сессионные cookie постоянными (с указанием срока годности).
Однако серверное программное обеспечение может отслеживать такие попытки. Для этого сервер выдаёт cookie на определённый срок и записывает дату окончания cookie у себя каждый раз, когда пользователь обращается к серверу. Если файл cookie, присланный браузером, имеет дату годности, отличную от той, что хранится на сервере, значит это попытка подмены даты годности cookie. Сервер может отреагировать, например, запросить у пользователя повторную авторизацию.
Настройка браузера
Большинство современных браузеров поддерживают cookie.[21] И, как правило, пользователь может выбрать, должны cookie использоваться или нет. Наиболее распространены следующие настройки браузеров:[18]
- Полное отключение cookie.
- Удаление cookie при закрытии браузера.
- Различение сторонних cookie с третьей стороны и соответствующее обращение с ними (например, ограничение или запрет для них).
- Обработка cookie на основе «белого» и/или «чёрного» списков, обновляемых пользователем или изготовителем браузера. Файлы cookie из «чёрного списка» блокируются.
- Запрет cookie от определённых доменов (разновидность «чёрного списка»).
- Установка разумных сроков истечения cookie.
Большинство браузеров, поддерживающих JavaScript, позволяют пользователю увидеть активные на данном сайте cookie, набрав javascript:alert("Cookies: "+document.cookie)
или javascript:prompt("Cookies:",document.cookie)
в адресной строке браузера[18]. Некоторые браузеры содержат менеджер cookie, позволяющий пользователю выборочно просмотреть и удалить cookie, хранящиеся в браузере.
Приватность и сторонние cookie
Файлы cookie значительным образом влияют на конфиденциальность и анонимность пользователей Интернета. Хотя cookie отправляются только на серверы домена, для которого они предназначены, веб-страница может подгружать изображения или другие компоненты из других доменов. Файлы cookie, получаемые во время подгрузки этих компонентов из других доменов, называются «сторонними»[22].
Рекламные компании используют сторонние cookie для отслеживания перемещений пользователя по сайтам. В частности, рекламная компания может отслеживать пользователей на всех сайтах, где установлены их рекламные баннеры. Знание страниц, посещённых пользователем, позволяет менять направленность рекламы в зависимости от предпочтений пользователя.
Создание профиля пользователей рассматривается как потенциальная угроза приватности даже при отслеживании в рамках одного домена, но особенно это актуально при отслеживания на нескольких доменах с использованием сторонних cookie. По этой причине в некоторых странах cookie регулируются законодательством.
Правительство Соединенных Штатов приняло строгие законы в отношении cookie в 2000 году, после того как выяснилось, что Агентство по борьбе с наркотиками США использовало cookie для отслеживания пользователей, просмотревших их антинаркотическую рекламу в сети. В 2002 году Дэниел Брандт установил, что ЦРУ устанавливает на компьютеры постоянные cookie со сроком хранения до 2010 года. Когда ЦРУ было уведомлено о неправомерности подобного использования cookie, управление заявило, что это было непреднамеренно и прекратило их установку.[23] 25 декабря 2005 года Брандт обнаружил, что Агентство национальной безопасности оставляло пару постоянных cookie после обновления программного обеспечения. После этого сообщения Агентство немедленно отключило cookie.[24]
Директива Евросоюза о конфиденциальности электронных данных от 2002 года[25] содержит нормы, касающиеся использования cookie. В частности, пункт 3 статьи 5 устанавливает, что хранение данных (в том числе cookie) может осуществляться, лишь если:
- пользователю предоставляется информация о том, как эти данные используются;
- пользователь имеет возможность отказаться от этого.
Тем не менее в данной статье также говорится, что хранение технически необходимых данных освобождается от этих норм. Ожидалось, что директива вступит в силу с октября 2003 года, но доклад от декабря 2004 года отмечает, что эти положения не нашли применения на практике и что в некоторых государствах (Словакия, Латвия, Греция, Бельгия и Люксембург) эти положения не внесены в национальные законодательства. Доклад предлагает провести тщательный анализ ситуации в государствах, участвующих в договоре.
Спецификация P3P включает возможность для веб-сервера сообщить браузеру о нарушении конфиденциальности, указывая характер собираемой информации и цели сбора. Сюда входит и использование информации, полученной с помощью cookie. По спецификации P3P браузер может принимать или отклонять cookie согласно пользовательским настройкам или же спросить пользователя.
Многие веб-браузеры, включая Safari от Apple и Internet Explorer версий 6 и 7 от Microsoft, поддерживают спецификации P3P, которые позволяют определить, следует ли разрешать сторонние cookie. Веб-браузер Opera позволяет пользователям отказаться от сторонних cookie и создать глобальные или выборочные профили безопасности для веб-доменов.[26] Firefox 2 был лишён этой опции, но она была восстановлена в версии 3.
Недостатки cookie
Помимо проблем конфиденциальности, cookie имеют и некоторые технические недостатки. В частности, они не всегда точно идентифицируют пользователя и могут быть причиной атак злоумышленников.
Неточная идентификация
Если на компьютере используется более одного браузера, то, как правило, каждый имеет отдельное хранилище для cookie. Поэтому cookie идентифицируют не человека, а сочетание учётной записи, компьютера, и браузера. Таким образом, любой человек, который использует несколько учётных записей, компьютеров или браузеров, имеет несколько наборов cookie.
Аналогично, cookie не различают пользователей, пользующихся одним компьютером и браузером, если не используются разные учётные записи в операционной системе.
Кража cookie
Во время нормальной эксплуатации сервер и браузер пользователя постоянно обмениваются cookie. Поскольку cookie могут содержать конфиденциальную информацию (имя пользователя, условия доступа и т. д.), их содержимое не должно быть доступно другим. Кража cookie — это акт несанкционированного перехвата cookie посторонними.
Файлы cookie могут быть украдены с помощью анализа трафика — это называется взломом сессии. Сетевой трафик может быть перехвачен и прочитан не только его отправителем и получателем (особенно в публичных сетях Wi-Fi). Этот трафик включает в себя и cookie, передаваемые через незашифрованные HTTP-сессии. Там, где сетевой трафик не шифруется, злоумышленники могут прочесть сообщения пользователей сети, в том числе их cookie, используя программы, называемые снифферами.
Эта проблема может быть решена путём установления между пользователем и сервером шифрованного соединения с использованием протокола HTTPS. Сервер также может использовать специальный флаг при установке cookie, после чего браузер будет передавать их только по надёжному каналу, например, через SSL-соединение.[6]
Однако большое число веб-сайтов, даже использующих безопасные HTTPS-сессии для идентификации пользователя, затем отправляют cookie и другие данные более простым незашифрованным HTTP-соединением. Злоумышленники могут легко перехватить cookie других пользователей и использовать их на соответствующих веб-сайтах.[27]
Для того чтобы гарантировать передачу cookie только через HTTPS-сессию, они должны иметь атрибут Secure.
Другой способ кражи cookie — межсайтовый скриптинг и несанкционированная отправка cookie на серверы, которые не должны получать их. Современные браузеры могут исполнять фрагменты кода, полученные с сервера. Если cookie доступны во время этого исполнения, их содержимое может в той или иной форме оказаться на серверах, которые не должны получать к ним доступ. Шифрование cookie не поможет в этом случае.[28]
Следующий вид межсайтового скриптинга, как правило, используют на сайтах, где пользователям разрешено отправлять сообщения с HTML-содержимым. При вставке соответствующего PHP/Javascript -кода в сообщение атакующий может получить cookie других пользователей.
Эти атаки можно предотвратить установкой флага HttpOnly,[29] делающей cookie недоступными для скриптов со стороны клиента. Тем не менее веб-разработчики должны предусматривать защиту от межсайтового скриптинга на стадии разработки веб-сайтов.[30]
Подмена cookie
Хотя теоретически cookie должны сохраняться и отправляться назад на сервер неизменными, злоумышленник может изменить их содержимое перед отправкой. К примеру, cookie могут содержать общую сумму, которую пользователь должен уплатить за свои покупки; изменив это значение, злоумышленник сможет заплатить меньше установленной суммы. Процесс изменения содержимого cookie называется подменой cookie.
Для защиты от подобных атак большинство веб-сайтов хранят в cookie лишь идентификатор сессии — случайно сгенерированное число или набор символов, используемое для определения сессии, в то время как вся другая информация хранится на сервере. В этом случае подмена cookie значительно затрудняется.
Межсайтовые cookie
Каждый сайт должен иметь свои собственные cookie, и сайт example.com не должен изменять или устанавливать cookie другого сайта example.org. Уязвимости веб-браузеров позволяют вредоносным сайтам нарушать это правило. Это похоже на отправление cookie, но здесь злоумышленник атакует пользователей с уязвимыми браузерами, а не сайт напрямую. Целью таких атак могут быть идентификаторы сессий.
Для защиты пользователям рекомендуется использовать последние версии браузеров, в которых эта проблема исправлена.
Нестабильность между клиентом и сервером
Файлы cookie могут вызвать противоречия между клиентом и сервером. Если пользователь получает cookie, а затем нажимает кнопку «Назад» в браузере, то состояние браузера уже другое по сравнению с моментом получения cookie. Для примера возьмем электронный магазин с корзиной покупок, основанной на применении cookie: пользователь добавляет покупку в корзину, затем нажимает кнопку «Назад», но покупка остаётся в корзине, хотя пользователь, возможно, хотел отменить покупку. Это может привести к путанице и ошибкам. Веб-разработчики должны помнить об этом и принимать меры для решения таких ситуаций.
Срок действия cookie
Постоянные cookie критикуются экспертами за свой долгий срок хранения, который позволяет веб-сайтам отслеживать пользователей и создавать их профиль с течением времени.[31] Здесь затрагиваются и вопросы безопасности, поскольку украденные постоянные cookie могут использоваться на протяжении значительного периода времени.
Кроме того, правильно составленная вредоносная программа, которая может быть запущена после аутентификации пользователя, сможет перенести сессионные cookie на компьютер злоумышленника, что в первом приближении позволит посещать защищённый сайт без ввода имени пользователя и пароля сколь угодно долгое время.
Обычные cookie имеют хоть и очень большой, но ограниченный «срок жизни», после чего удаляются. Кроме того, любые cookie в браузере можно удалить с помощью специальной опции. В результате браузер перестает идентифицировать посетителя при повторном заходе на сайт. Польский специалист Сэмми Камкар решил систематизировать наиболее «живучие» cookie, в результате чего появилась JavaScript-библиотека под названием Everycookie. Такие чудо-cookie теоретически позволяют идентифицировать любого посетителя сайта при его возвращении на страницу. Сайт, использующий библиотеки Everycookie, без труда обходит все меры по сохранению анонимности (хотя некоторые антивирусы могут определять такие сайты как опасные). Для защиты от Everycookie рекомендуется использование режима Private Browsing, либо специальных программ, таких, как Mil Shield.
Альтернативы cookie
Некоторые операции, для которых используются cookie, могут быть реализованы с помощью других механизмов. Тем не менее эти альтернативы имеют свои недостатки, которые делают cookie порой более предпочтительными на практике. Большинство этих альтернатив позволяет отслеживать пользователя, хотя и менее надёжным способом, чем cookie. Как результат, неприкосновенность частной жизни остаётся под угрозой, даже если cookie отключены браузером или не устанавливаются сервером.
IP-адрес
Этот ненадёжный метод отслеживания пользователей основан на хранении IP-адресов компьютеров, просматривающих страницы. Данная техника доступна с самого появления World Wide Web, которая требует знания IP-адреса клиента для загрузки страницы. Эту информацию можно хранить на сервере вне зависимости от того, используются cookie или нет.
Тем не менее этот способ менее надёжен, чем cookie, поскольку компьютеры и прокси могут совместно использоваться несколькими пользователями, а один компьютер может использовать разные IP-адреса в разных сессиях (динамический IP-адрес).
Отслеживание по IP-адресу может оказаться невозможным и при использовании систем сохранения анонимности (например, Tor). В таких системах один браузер может иметь несколько IP-адресов, и несколько пользователей могут использовать один IP-адрес, в результате чего отслеживание IP-адреса не представляется возможным.
Некоторые крупные провайдеры, включая AOL, пропускают весь веб-трафик через сеть прокси[источник не указан 5011 дней], что также делает этот метод неосуществимым.
URL (строка запроса)
Более прогрессивная методика основана на встраивании данных в URL. Обычно для этого используется строка запроса, но так же могут задействоваться и другие части URL. Языки JavaScript и PHP активно используют эти механизмы при отключенных cookie.
Веб-сервер добавляет строку запроса к ссылке на веб-страницу при её отправке в браузере. Когда пользователь переходит по ссылке, браузер возвращает строку запроса серверу.
В этом плане строка запроса и cookie очень схожи: они являются фрагментами информации сервера, возвращаемой обратно браузером. Но есть и определённые различия: так как строка запроса является частью URL, то при повторном использовании этого URL на сервер передастся та же информация. Например, если опции пользователя кодированы в строке запроса URL, и пользователь отправляет этот URL другому пользователю, эти опции будут действовать и для другого пользователя.
Более того, даже если пользователь повторно обращается к одной и той же странице, нет никакой гарантии, что строка запроса останется неизменной. Например, при переходе с внутренних страниц сайта и с внешних поисковых систем строки запроса будут разными, когда cookie оставались бы одинаковыми.
Другой недостаток строки запроса проявляется в вопросах безопасности: хранение идентификатора сессии в строке запроса упрощает проведение атаки. Передача идентификатора в cookie более безопасна.
Скрытые поля формы
Одним из способов отслеживания сессии с помощью выполняемой на стороне сервера программы является использование веб-форм со скрытыми полями. Этот метод очень похож на строку запроса URL и обладает почти теми же преимуществами и недостатками, а если параметры формы отправляются HTTP-методом GET, то поля фактически станут частью URL, который браузер отправит на сервер. Но большинство форм обрабатывается HTTP POST, при которой информация не является ни частью URL, ни cookie.
Этот подход даёт два преимущества в вопросе отслеживания: во-первых, вставка информации в HTML-код и в POST, а не в URL, означает, что средний пользователь её просто не заметит, во-вторых, информация сессии не копируется с копированием URL (например, когда пользователь отправляет ссылку по электронной почте). Недостаток метода состоит в том, что информация сессии содержится в HTML-коде, поэтому веб-страница должна генерироваться каждый раз, когда её запрашивают, что увеличивает нагрузку на веб-сервер.
HTTP-аутентификация
Протокол HTTP включает в себя базовую аутентификацию и шифрование, которые разрешают доступ к странице, только когда пользователь введёт правильное имя пользователя и пароль. Если сервер запрашивает подобное, то браузер обращается к пользователю и, получив нужные данные, сохраняет и использует их для доступа к другим страницам, не требуя от пользователя вводить их заново. С точки зрения пользователя эффект тот же, что и при использовании cookie: имя пользователя и пароль требуются лишь однажды, и потом пользователь получает доступ к сайту. При базовой аутентификации сочетание имени пользователя и пароля отправляется на сервер при каждом запросе браузера в незашифрованном виде. Это означает, что если кто-то перехватывает трафик, он сможет получить эту информацию и впоследствии использовать. При шифрованной аутентификации имя пользователя и пароль шифруются со случайным ключом, созданным сервером.
Сохранение на клиентской стороне
Некоторые веб-браузеры позволяют странице сохранять информацию локально для последующего извлечения. Internet Explorer, например, поддерживает сохранение информации в истории, избранном, XML-хранилище, или позволяет провести прямое сохранение веб-страницы на диск.[32]
Немного отличный механизм используется в браузерах, кэширующих файлы javascript, используемые в веб-странице. Например, страница может содержать ссылку <script type="text/javascript" src="example.js">
. С загрузкой страницы загружается и example.js. Затем скрипт кэшируется и не требует загрузки при повторном посещении страницы. В результате, если скрипт содержит такое значение, как id=3243242, этот идентификатор остаётся в силе и может быть использован другим сценарием javascript или другой страницей, запрашивающей этот скрипт.
Примечания
- ↑ Проблемы с работой интернет-магазина . OZON.ru. Дата обращения: 12 августа 2008.
- ↑ 1 2 FAQ по куки (англ.). Microsoft. Дата обращения: 12 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Справочный центр, веб-поиск . Google. Дата обращения: 12 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Киви Берд. Целевая реклама - угроза приватности? Компьютерра. Дата обращения: 12 августа 2008. Архивировано 5 апреля 2013 года.
- ↑ 1 2 Netscape. Предварительная спецификация кук (англ.) (txt). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ 1 2 3 RFC 2109 и RFC 2965 — Механизм управления состояниями HTTP (IETF)
- ↑ Андрей Аликберов. Что такое cookies и как с ними работать (1998). Дата обращения: 2 августа 2008. Архивировано 26 августа 2011 года.
- ↑ John Schwartz. Giving Web a Memory Cost Its Users Privacy (англ.). New York Times (4 сентября 2001). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Netscape Communications Представляют Новый Сетевой Бесплатной Интернет-Навигатор (англ.). CNET Networks (13 октября 1994). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Марк Андреассен. Мир, вот он! (англ.) (13 октября 1994). — Сообщение на Usenet. Дата обращения: 7 августа 2008.
- ↑ Сэнди Хардмайер. История Internet Explorer (англ.). Microsoft (25 августа 2005). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Роджер Кларк. Куки (англ.) (1 июня 1998). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Вопреки уверениям, куки - добро! (англ.). ARA Content (2005). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ I-034: Интернет-куки (англ.). Министерство энергетики США (12 марта 1998). Дата обращения: 7 августа 2008.
- ↑ Брайан Куинтон. Исследование: Пользователи не понимают, что такое куки, и не умеют их удалять (англ.) (18 мая 2005). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Адам Пененберг. Куки-монстры (англ.) (7 ноября 2005). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Росс Шэннон. Куки и JavaScript (англ.) (26 февраля 2007). Дата обращения: 7 августа 2008. Архивировано 26 августа 2011 года.
- ↑ 1 2 3 Дэвид Уолен. Неофициальный FAQ по куки (англ.) (6 августа 2002). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ О куки (англ.). AOL (15 марта 2004). Дата обращения: 13 августа 2008. Архивировано 21 марта 2006 года.
- ↑ Куки и авторизация (англ.). MSDN. Дата обращения: 13 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Поддержка веб-браузеров (англ.). Университет Буффало (15 ноября 2004). Дата обращения: 13 августа 2008. Архивировано 14 сентября 2005 года.
- ↑ Доклад по проблеме безопасности при использовании «куки» (англ.) = Bittersweet cookies. Some security and privacy considerations // Европейское агентство по безопасности сетей и информационной безопасности (ENISA). — 2011.
- ↑ ЦРУ поймано на краже куки (англ.). CBS News (20 марта 2002). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Агентство удаляет незаконные файлы слежения (англ.). Associated Press (29 декабря 2005). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Директива о неприкосновенности частной жизни и электронных коммуникаций (англ.) (12 июля 2002). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Настройки куки в Opera 9 (англ.). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Wi-fi взлом веб-почты (англ.). BBC News (3 августа 2007). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ На что похожа XSS-кража куки? (англ.). Cgisecurity.com (май 2002). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Снижение опасности межсайтового скриптинга с помощью HTTP-only кук (англ.). Microsoft. Дата обращения: 8 августа 2008. Архивировано 13 августа 2011 года.
- ↑ Майкл Ховард; Кит Браун.: 10 советов по защите кода (англ.). Microsoft (2000). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Элинор Милз. Google снижает срок хранения куки для повышения безопасности (англ.). CNET Networks (16 июля 2007). Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.
- ↑ Введение в Хранение (англ.). MSDN. Дата обращения: 8 августа 2008. Архивировано 26 августа 2011 года.